1

特定の例で「クエリをカバーすること」が何を意味するのかを理解しようとすると、たとえば3つの列を持つテーブルがある場合:

Col1 Col2 Col3

そして、 Col1Col2にインデックスを付けます。

「クエリのカバー」は、SELECT で選択された列または WHERE 句の列によって決定されますか? したがって :

1) select Col1, Col2 from MyTable where Col3=XXX 
2) Select Col3 from MyTable where Col1=xxx and Col2=yyy
3) Select Col1, Col2 from MyTable where Col1=xxx and Col2=yyy

これらの 3 つのうち、本当に「カバー」されているのはどれですか?

4

2 に答える 2

0

where句とselect句だけではありません。また、group by 句をカバリング インデックスにするためには、列がインデックスによってカバーされる必要があります。基本的に、カバリング インデックスになるには、特定のテーブルのクエリで使用されるすべての列を含める必要があります。ただし、正しい順序で含めないと、インデックスは使用されません。

インデックスの列の順序が (col1、col2、col3) の場合、col3 で選択しているため、インデックスをクエリ 1 に使用することはできません。姓、名、ミドルネームの順に並べられた電話帳のようなものだと考えてください。名字が Smith の全員を検索するのは簡単ですが、名が John の全員を検索するには、並べ替えは役に立ちません。電話帳全体を読まなければなりません。インデックスも同じ。col1 値を見つけるのは簡単です。col1 値を見つけてから col2 値を見つけても問題ありません。col3 または col2 を見つけるだけでは、インデックスは役に立ちません。

于 2013-10-01T13:53:52.583 に答える