sql – 大的性能差异:使用sysdate vs使用预先格式化的日期
发布时间:2020-12-12 06:40:50 所属栏目:MsSql教程 来源:网络整理
导读:为什么这两个查询之间存在如此巨大的性能差异? -- (89 seconds)SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'AND mydate sysdate - 5 与 -- (0.6 seconds)SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'AND mydate TO_DATE('05/27/20
为什么这两个查询之间存在如此巨大的性能差异?
-- (89 seconds) SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG' AND mydate < sysdate - 5 与 -- (0.6 seconds) SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG' AND mydate < TO_DATE('05/27/2011 03:13:00','MM/DD/YYYY HH24:MI:SS') -- 5 days ago 无论索引如何,似乎to_date和sysdate都返回“some date value”. 注意:此表上存在复合索引,包括eqpid和其他2列. 为什么优化器会选择这些明显不同的(在一种情况下,可怕的)计划? 解决方法Jonathan Lewis撰写了关于9i中sysdate的问题;例如,看看“令人惊讶的sysdate”部分 here.本质上,sysdate上的算法似乎混淆了优化器,因此在这种情况下,它认为mydate上的索引更具选择性.这似乎是一个非常极端的例子. (最初从一个与真正无关的Ask Tom帖子指向这个方向).(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |