2011-01-12 7 views
2

私は70,000以上のトラックを持つ音楽テーブルを持っており、そこからプレイリストを照会したいと思っています。私は現在、 'AND track.id IN(プレイリストからIDを選んでください:pid = 5)'ステートメントを持つクエリを実行しています。副選択以外の行を引き出すより速い方法がありますか?大きなテーブルから小さな選択をクエリする最速の方法は?

+2

M-M関係テーブルから「通常の」結合シーケンスを使用する可能性があります。これは、「基本的な」リレーショナル代数モデルでうまく適合するように使用する*最初のアプローチです。正しいインデックス設定では、合理的な量のデータ(少なくとも70k曲以上)について、素朴な分割(通常はハッシュ結合またはそれに匹敵)する必要があります。リレーショナルSQLデータベースは、このようなことのために*設計されています。疑問がある場合は、実際のクエリの実行計画(mysqlがそのsubselectをどのように変換するかはわかりません)と実行タイミングを確認してください。 'EXPLAIN'を参照してください。 –

+3

"大きなテーブルからの小さな選択"は "インデックス"を叫びます。今は遅すぎますか? – Thilo

+0

テーブルのインデックスが作成されています。 – Jason

答えて

1

私は愛好者だけで、完全に独学であるため、既に上記の人が何を言っているのかを繰り返すと、許してください。

しかし私には、サブセレクトの使用はDbの余分な仕事のように思えます。音楽テーブル(tblMusic、PK_SongID)、プレイリストテーブル(tblPlaylist PK_PLaylistID)、およびそれらを相互に索引付けする参照テーブル(tblPlaylist_tblMusic FK_tblPLaylist.PLaylistID、FK_tblMusic.SongID)があるように見えます。この表は、本質的にプレイリストと曲の間の多対多のインデックス関係になります。次に、3つのテーブル間でINNER JOINを実行し、SELECT CriteriaをPlaylistIDに設定します。

これはpstが上で説明したものだと思っていますが、私は間違っている可能性があります。 。 。

関連する問題