我的MySQL查詢看起來是這樣的:重寫查詢以刪除FIND_IN_SET?
SELECT pages.*,
showcase.*,
project.*
FROM pages
INNER JOIN showcase ON showcase.pid = pages.uid AND showcase.deleted != 1
INNER JOIN project ON FIND_IN_SET(project.uid, showcase.projects)
WHERE pages.deleted != 1
AND pages.pid = 14
AND pages.dokType = 150
的問題是第二INNER JOIN
- 它使用FIND_IN_SET
因爲陳列櫃(=項目集合)存儲其項目爲逗號領域showcase.projects
分隔的列表。據我所知,FIND_IN_SET
無法使用索引,因此第二次連接需要對項目表進行全表掃描。在不更改數據庫方案的情況下使用索引的可能性?
猜你是對的,我會在星期一開始正常化數據。當然是最好的解決方案。 – Max 2010-06-04 14:52:26
祝你好運。只是不要在正常化的情況下下決心:)它可以在未來引入性能/處理數據問題。 – 2010-06-04 19:03:33