【发布时间】:2010-08-25 10:29:18
【问题描述】:
我们有一个包含 600 万条记录的表,然后我们有一个 SQL 需要大约 7 分钟来查询结果。我认为 SQL 不能再优化了。
查询时间导致我们的weblogic抛出最大阻塞线程异常。
有什么建议可以让我处理这个问题吗?
以下是查询,但我很难更改它,
SELECT * FROM table1
WHERE trim(StudentID) IN ('354354','0')
AND concat(concat(substr(table1.LogDate,7,10),'/'),substr(table1.LogDate,1,5))
BETWEEN '2009/02/02' AND '2009/03/02'
AND TerminalType='1'
AND RecStatus='0' ORDER BY StudentID, LogDate DESC, LogTime
但是,我知道使用字符串来比较日期很耗时,但是在我无法更改表结构之前有人写道...
LogDate被定义为一个字符串,格式是mm/dd/yyyy,所以我们需要在...和...之间进行substring和concat,我觉得这里很难优化。
【问题讨论】:
-
在不知道您的索引或表结构等的情况下,我们无法评论问题是否是 SQL 问题。
-
在日期列上使用 concat() 和 substr() 对我来说没有任何意义,并且肯定会阻止使用任何索引。另外,为什么要修剪() StudentID 列?如果是PK的话,听起来就很诡异。
-
你能展示一下这张桌子的样子吗?即列类型是什么?
标签: database oracle query-optimization