0

この回答に基づいて構築: https://stackoverflow.com/a/2349824/1382306

A と B の使用法にさらにガイドラインはありますか、それとも同じように重要ですか?

私は持っていSELECT FROM table1, table2 WHERE table2.table1id = table1.id AND table2.constant = ?ます。

私の場合、私はそれを知っていますか?ユーザー定義変数からのものです。それは決して変わらないので、それは違いを生みますか?

「As を持つすべての B が見つかり、次にすべての B が検索される」のように、(A,B) と (B) に対して使用されるロジックの説明を求めることができますか?

よろしくお願いします!

4

2 に答える 2

2

あなたは質問に質問を書いていませんが、どのような種類のインデックスを使用する必要があるか知りたいと思います.

とにかく、主キーを持っていtable2ます。いくつかの列のみを選択する場合は、それらもインデックスに含める必要があります。このようにして、MySQL は のデータをロードしなくても、インデックスから直接クエリに答えることができます。これは、インデックスの左端の列であるために実行できるインデックスを検索することによって行われ、インデックスからもロードされます。その場合は、 からの出力でUsing indexを確認できます。(constant, table1id)table1idtable2table2constantconstanttable1idEXPLAIN

于 2013-01-04T03:24:26.207 に答える
1

別の人気のある投稿https://stackoverflow.com/a/4120191/1382306に隠されているように見えます

「クエリは、インデックス列定義で左から右に、カバリング インデックス (複数の列のインデックス) を処理する場合、列の順序に対処する必要があります。ステートメントの列の順序は重要ではなく、列 1 の順序のみが重要です。 、2 および 3 - インデックスを使用するには、ステートメントに列 1 への参照が必要です。列 2 または 3 への参照しかない場合、1/2/3 のカバリング インデックスは使用できません。

MySQL では、クエリの SELECT/ステートメントごとに 1 つのインデックスのみを使用できます (サブクエリ/etc は別のステートメントと見なされます)。また、MySQL が許可するテーブルごとのスペースの量には制限があります。さらに、インデックス付きの列で関数を実行すると、インデックスが役に立たなくなります」

その答えにもインデックスの落とし穴の良いリストがあります。


私の場合、「クエリの / ステートメントごとに使用できるインデックスは 1 つだけSELECTです」ので、 (?, table2.table1id) のみを使用するのが良いと思います。

于 2013-01-04T03:48:36.813 に答える