0
我在我的數據庫中有這個查詢,它基本上是從座標半徑10英里內拉出來的。SQL優化
SELECT id
FROM business
WHERE (coordinates!=''
AND getDistance('-2.1032155,49.1801863', coordinates)<10)
AND id NOT IN ('6', '4118') ORDER BY rand() LIMIT 0,5
當我資料這個查詢,我得到這個: 連接大小:3956(BAD) 使用臨時(BAD) USINGI文件排序(BAD)
你們能不能幫我優化這個查詢?
在此先感謝
我總是使用IN()來檢查條件的子集。這是一個不好的練習嗎?例如,如果我想計算成員對他最喜歡的東西,我會這樣做:SELECT * FROM table WHERE member_id IN(1,2,3,4,5,6,7,8,... 2000) – gumpi 2010-11-04 14:50:38
用一粒鹽來表達我的看法。這在很大程度上取決於特定DMBS的功能。如果查詢優化器很聰明,它可以輕鬆地將IN語句展開到相應的「field ='值'OR ...」語句中。但是我看到DBMS在這方面失敗了;並且函數會在每個記錄上向覆蓋層報告之前運行,這使查詢變慢。 – 0xCAFEBABE 2010-11-04 15:10:41