,下面的語句引起如此大的壓力到MySQL引擎它幾乎掛起:很慢的SQL語句
select c.title, c.initial, c.surname, c.labelno, c.email, br1.bookingdate
from explorer.booking_record br1
inner join explorer.client c
on c.labelno = br1.labelno
and email not like ''
where br1.bookingdate >= '2009-01-01'
and br1.bookingdate < '2009-01-31'
and c.labelno Not In (Select labelno from explorer.booking_record br2 where br2.labelno = br1.labelno and br2.bookingdate >= '2010-01-01' and br2.bookingdate < '2010-01-31')
我已經試過上一些變化同樣,沒有連接和兩個子語句,按照文檔的建議添加'order by'。數據庫中實際上並沒有那麼多記錄,booking_record有大約50萬條記錄,客戶端有450,000條記錄。如果我讓查詢運行,它通常會在70-80秒後得到20個結果,但這會導致服務進入循環狀態。
任何意見將不勝感激。
丹尼爾。
您是否在labelno&bookingdate(或兩者上都有複雜的一個)上定義了索引? – 2010-01-18 12:04:04
我實際上沒有對數據庫本身的任何控制,所以我不能告訴你 - 我會看看它作爲索引看起來是一個普通的話題在這裏 – 2010-01-18 12:33:50
好吧,我已經看了一下,labelno是一個索引在客戶端,但在booking_record中的索引是在bookingref(實際上並未在此查詢中使用) – 2010-01-18 12:41:38