2011-01-12 69 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上面描述的,但我可能是错的。 。 。