暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DMSQL优化之LIKE前后百分号

达梦大学 2021-01-08
1526


本章内容已在如下环境上测试:

①操作系统:中标麒麟7;

②数据库版本:达梦DM8;


一、准备工作

01

生成测试数据

    CREATE TABLE TB_LIKE (A INT,B VARCHAR2(100));
    INSERT INTO TB_LIKE SELECT LEVEL,LEVEL||'太阳光'||LEVEL FROM DUAL CONNECT BY LEVEL<=600000;
    INSERT INTO TB_LIKE SELECT LEVEL,LEVEL FROM DUAL CONNECT BY LEVEL<=1000000;
    COMMIT;

    02

    收集统计信息

      CALL DBMS_STATS.GATHER_TABLE_STATS('SYSDBA','TB_LIKE',NULL,100);


      二、测试验证

      01

      测试场景

        SELECT COUNT(*) FROM TB_LIKE WHERE B LIKE'%太阳光%';
        --执行成功, 执行耗时119毫秒. 执行号:747


        02

        测试方法1:创建单索引

          CREATE INDEX TEST_INDEX_1 ON TB_LIKE(B);


          SELECT COUNT(*) FROM TB_LIKE WHERE B LIKE'%太阳光%';
          --执行成功, 执行耗时143毫秒. 执行号:751

          虽然执行计划中利用了索引,但效果并不明显。


          03

          02

          测试方法2:创建函数索引及调整参数LIKE_OPT_FLAG

          3.1LIKE_OPT_FLAG参数介绍:

          --LIKE 查询的优化开关。

          --0:不优化;

          --1:对于LIKE 表达式首尾存在通配符的情况,优化为POSITION()函数;对于 LIKE 表达式首部存在通配符,并且条件列存在REVERSE()函数索引时,优化为 REVERSE()函数;

          --2:对于 COL1 LIKE COL2 || '%'的情况,优化为POSITION()函数;4:对于 COL1 LIKE A||B%’的情况,优化为 COL1 LIKE AB%’。

          --支持使用上述有效值的组合值,如 5 表示同时进行 1 4 的优化

           

          3.2、调整参数

            SP_SET_PARA_VALUE('1','LIKE_OPT_FLAG',1);

            将此参数调整为1,如果已经包含1,不用修改。

             

            3.3、创建函数索引验证效果


              CREATE INDEX TEST_INDEX_2 ONTB_LIKE(POSITION('太阳光',B));


              SELECT COUNT(*) FROM TB_LIKE WHERE B LIKE'%太阳光%';
              --执行成功, 执行耗时22毫秒. 执行号:755


              04

              02

              测试方法3:创建全文索引及改写SQL

              4.1、创建中文最少词法分析器-全文索引

                CREATE CONTEXT INDEX TEST_INDEX_3 ONTB_LIKE(B) LEXER CHINESE_LEXER;
                ALTER CONTEXT INDEX TEST_INDEX_3 ON TB_LIKEREBUILD;

                创建完全文索引需执行上面的语句填充一次数据。

                 

                4.2、验证效果

                  SELECT COUNT(*) FROM TB_LIKE WHERE  CONTAINS(B,'太阳光');
                  --执行成功, 执行耗时732毫秒. 执行号:768



                  以上是本次分享内容,希望能给大家带来帮助,谢谢。


                  往期回顾

                  干货攻略丨DM巧用分区交换将非分区表转换为分区表
                  干货攻略丨DM8并行查询
                  干货攻略丨DM8-AWR报告
                  干货攻略DM8全文索引的使用

                  文章转载自达梦大学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论