2011-01-12 24 views
2

我有一張包含超過70,000首曲目的音樂表,並且希望查詢播放列表。我目前正在運行一個具有'AND track.id IN(從播放列表中選擇id,其中pid = 5)'語句的查詢。除了子查詢以外,是否有更快的方法來拉出行?從大表中查詢小選擇的最快方法?

+2

您可能只是通過M-M關係表使用「正常」連接序列,這是我使用的* first *方法,因爲它恰好適合「基本」關係代數模型。通過正確的索引設置,對於任何合理數量的數據,它應該是輕鬆分割(通常只是散列連接或可比較的) - 至少有超過7萬首歌曲。關係型SQL數據庫是爲這類事情設計的。如果有疑問,請查看實際的查詢執行計劃(我不知道mysql可能會將該子查詢轉換爲什麼)和執行時間。參見`EXPLAIN`。 – 2011-01-12 06:43:47

回答

1

我只是一個熱心人,而且完全自學,所以如果我重複上面已經提到的任何人,請原諒。

但是,對於我來說,您對Sub-Select的使用看起來像是Db的額外工作,並且可擴展性較差。似乎應該有一個音樂表(tblMusic,PK_SongID),一個播放列表表(tblPlaylist PK_PLaylistID)和一個將它們索引到彼此的參考表(tblPlaylist_tblMusic FK_tblPLaylist.PLaylistID,FK_tblMusic.SongID)。該表基本上是播放列表和歌曲之間的多對多索引關係。然後,您只需在三個表之間執行INNER JOIN,並將SELECT條件設置爲PlaylistID。

我懷疑這是pst上面描述的,但我可能是錯的。 。 。