表索引字段嵌套函数引起的性能问题

先看这句SQL


SELECT   agentalias, COUNT (DISTINCT (callin))
    FROM (SELECT agentalias, ani callin
            FROM table_a
           WHERE TO_DATE (starttime, 'yyyymmddhh24miss') BETWEEN TRUNC
                                                                      (SYSDATE)
                                                             AND SYSDATE
             AND connectlength > 0
             AND agentalias = '4003'
          UNION ALL
          SELECT agentalias, connectno callout
            FROM table_b
           WHERE TO_DATE (starttime, 'yyyymmddhh24miss') BETWEEN TRUNC
                                                                      (SYSDATE)
                                                             AND SYSDATE
             AND connectlength > 0
             AND LENGTH (TRIM (connectno)) > 5
             AND agentalias = '4003')
GROUP BY agentalias


再看同样功能的SQL


SELECT   agentalias, COUNT (DISTINCT (callin))
    FROM (SELECT agentalias, ani callin
            FROM table_a
           WHERE starttime BETWEEN TO_CHAR (TRUNC (SYSDATE), 'yyyymmdd')
                               AND TO_CHAR (SYSDATE, 'yyyymmddhh24miss')
             AND connectlength > 0
             AND agentalias = '4003'
          UNION ALL
          SELECT agentalias, connectno callout
            FROM  table_b
           WHERE starttime BETWEEN TO_CHAR (TRUNC (SYSDATE), 'yyyymmdd')
                               AND TO_CHAR (SYSDATE, 'yyyymmddhh24miss')
             AND connectlength > 0
             AND LENGTH (TRIM (connectno)) > 5
             AND agentalias = '4003')
GROUP BY agentalias


table_a、table_b 表中 starttime  都是 index


执行结果中,第一个SQL很慢,查看查询计划走的是全表扫描,第二个SQL很快,因为走的索引

 

结论:通过SQL比较,发现在当在查询字段starttime,亦即index字段上加上函数后就会出现不走index而走全表扫描的情况。这里是不是可以得出如果在当index字段作为搜索条件时,如果在index上使用了函数那么该index将不会起到作用?

转载于:https://my.oschina.net/yeelee/blog/650916

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值