0
讓我們想象一下,我有以下表結構SQL查詢的提高表現在多個列中選擇不同表的IDS
表:圖像
id path
1 x
2 x
3 x
4 x
5 x
6 x
7 x
8 x
表:用戶
id image imageSmall
1 1 1
2 2 2
3 4 4
桌:圖書
id image imageSmall
1 5 5
2 6 6
3 8 8
我現在想要獲取其他表格中使用的每張圖片的ID。我做了這裏
SELECT id FROM images WHERE id IN (SELECT image FROM user) OR id IN (SELECT imageSmall FROM user) OR id IN (SELECT image FROM books) OR id IN (SELECT imageSmall FROM books);
我看到這裏的問題這個查詢的是,當我有大量的數據,該查詢可能會非常耗時,而不是高性能的,因爲許多IN
部分的在所有查詢。有沒有辦法來改善這個查詢的性能?
這是怎麼回事?我不測試,突然試試看:'SELECT DISTINCT id FROM圖像where id in(SELECT image FROM user UNION SELECT imageSmall FROM user UNION SELECT image FROM FROM UNION SELECT imageSmall FROM books);' – vaso123 2014-11-05 11:56:04
每個子選擇都可以被重寫成JOIN 。但是,MySQL優化器足夠聰明,可以做它必須做的事情。這意味着你需要看看你想象的情景是否存在。創建大量記錄,然後衡量查詢的性能。使用'EXPLAIN'來查看MySQL的作用,以及它是否真的消耗時間 - 那麼是時候進行優化了。 – 2014-11-05 11:56:13