我有一堆代碼,通過它們的ID在數據庫中查找一些CD。這是使用'IN'條件完成的:MySQL和性能:使用'IN'還是'JOIN'?
(1) SELECT * FROM album WHERE id IN (?,?,?,?,?)
下一步是獲取與這些專輯相關的曲目。我通過修改'base'查詢來做到這一點。
(2) SELECT track.* FROM album
LEFT JOIN track ON track.album_id = album.id
WHERE album.id IN(?,?,?,?,?)
現在,我已經有了專輯和曲目。但是,我需要加載曲目的作曲者詳細信息。出於幾個原因,我無法與上述查詢一起完成,因此我需要單獨執行。
我可以做的是根據曲目查找作曲家,在那裏使用曲目ID並根據這些曲目ID查找作曲家表中的作曲家。或者,我可以更進一步修改「基本」查詢,並再次使用composers表進行連接。然而;這裏有一個通用的規則(關於表現),它容易指出其中一個詢問有利嗎?我已經測試了一點,但我已經做了這樣一個小規模的,我實在看不出有什麼區別...
(3) SELECT composer.* FROM album
LEFT JOIN track ON track.album_id = album.id
LEFT JOIN composer ON composer.track_id = track.id
WHERE album.id IN (?,?,?,?,?)
......或者......
[get track ids from query (2)]
(4) SELECT composer.* FROM composer
WHERE composer.track_id IN (?,...);
爲了記錄:我已經在所有標準和連接列上都有索引。
您是否可以在工作臺中運行兩個查詢,然後比較結果? –
一般規則是,你應該總是'加入'。 – Jon
你有多少個track id? sql字符串可能會變得非常大。 – edze