1

mySQL または SQL Server で複数のテーブルを結合し、パフォーマンスを高速に保つのに苦労しています。私はこのテーブルを持っています:

テーブルソング

songID|songName
---------------
01|diamond
02|goodbye

テーブルシンガーソング

 songID|singerID
 ---------------
 01|15
 02|22

テーブルシンガー

singerID|singerName|Sex
------------------------
15| Rihanna | F
22| Air Supply | M

そして、私は次のような結果が欲しいです:

songID|songName|singerName|Sex
------------------------------ 
01|diamond|Rihanna|F 
02|goodbye|Air Supply| M

私のクエリはこのようなものです

SELECT s.songID, s.songName, sr.singerName, sr.Sex 
FROM songs s, singersong ss, singer sr
WHERE 
ss.songID = s.songID AND 
ss.singerID = sr.singerID
ORDER BY s.songID

そして、それは非常に遅い..とにかく、このクエリをより単純またはより効率的にする方法はありますか?

助けてくれてどうもありがとう.. LL

4

3 に答える 3

0

インデックスだけでは十分ではありません。移動方向に結合テーブルにまたがる複数列のインデックスが必要です。つまり、Song から開始して Singer に移動する場合、インデックスは次のようになります。INDEX songSinger (songID,singerID)

また、Singer から Song にクエリを実行する場合、インデックスは次のようになります: INDEX SingerSong (singerID,songID)

インデックス付けされた列が 1 つだけの場合、MySQL はインデックスを使用してテーブル singersong から結果のセットを取得し、結果をロードしてから、結合の次のステップのために結果のリストをスキャンします。

ただし、2 つの列にまたがるインデックスがある場合、MySQL は結合テーブルをロードすることさえせず、単にインデックスを使用します。

于 2016-03-02T23:16:53.873 に答える