我們有一張有600萬條記錄的表格,然後我們有一個SQL需要大約7分鐘來查詢結果。我認爲SQL不能再被優化。我該如何處理耗時的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,所以我們需要對它進行子串和連接,比我們之間可以使用...和...我認爲很難優化這裏。
不知道你的索引是什麼或表結構等,我們不能評論問題是否是一個SQL的問題。 – 2010-08-25 10:34:14
在日期列上使用concat()和substr()對我來說沒有任何意義,並且肯定會阻止任何索引的使用。另外爲什麼你修剪()StudentID列?如果這是PK,這聽起來很奇怪。 – 2010-08-25 11:06:00
你能告訴我你的桌子是怎麼樣的嗎?即什麼是列類型等? – Wolph 2010-08-25 13:13:34