2011-01-21 23 views
0

我有以下查詢,我需要幫助。如何從mysql_slow.log中保存這樣的查詢?

SELECT a.artist, a.facepic 
FROM artists_vs AS v, artists AS a 
WHERE v.genreid =0 
AND (v.artistid1 = a.artistid OR v.artistid2 = a.artistid) 
ORDER BY v.bid DESC 
LIMIT 20 

所有查詢的字段建立索引,但是當我運行一個解釋,我得到如下:

1 SIMPLE v ref genreid,artistid1,artistid2 genreid 4 const 15 Using temporary; Using filesort 
1 SIMPLE a ALL PRIMARY NULL NULL NULL 18165 Range checked for each record (index map: 0x1) 

我需要登錄查詢 - 不使用的索引中啓用了我.cnf

任何人都可以建議如何我可以重寫這個查詢,以保持它的慢日誌?

回答

1

你可以嘗試這樣的事:

SELECT 
    a.artist, 
    a.facepic, 
    V.bid 
FROM artists_vs AS v 
inner join artists as a on v.artistid1 = a.artistid 
WHERE v.genreid = 0 
union 
SELECT 
    a.artist, 
    a.facepic, 
    v.bid 
FROM artists_vs AS v 
inner join artists as a on v.artistid2 = a.artistid 
WHERE v.genreid = 0 
ORDER BY bid DESC 
LIMIT 20 
+0

這似乎工作得很好,謝謝。 – ryanneufeld 2011-01-24 20:08:51