此行使查询运行速度非常慢。如果我删除“+ K.OFFSET / 1440”部分它运行正常。有更快的方法吗? $ From_Date =“02/04/2014”和$ To_Date =“05/04/2014”。
AND (CT.START_GMT + K.OFFSET/1440 >= TO_DATE('$From_Date', 'mm/dd/yyyy')) AND (CT.START_GMT + K.OFFSET/1440 <= TO_DATE('$To_Date', 'mm/dd/yyyy'))";
答案 0 :(得分:2)
只要在列中添加,减去或应用函数,就可以使用以下列中的列:
WHERE
子句中的字段ON
内的字段你失去了任何索引的好处。
START_GMT
列可能是不再应用的索引的一部分。
您可以在添加添加之前和之后比较查询的索引使用,并查看索引使用是否已更改。
explain <your fast query>;
explain <your slow query>;
如果关键问题是问题,您很可能会看到'possible_keys'和'Extra'列在2个解释查询之间发生变化。
如果将添加移动到比较的另一侧,您将获得索引权益:
(CT.START_GMT >= TO_DATE('$From_Date', 'mm/dd/yyyy') - K.OFFSET/1440) AND ...
在where子句中的所有比较中执行此操作。祝你好运!