3

複数の条件を含むSQL選択クエリの時間計算量はどれくらいですか?

SELECT * 
  FROM products 
 WHERE price > 100 
   AND width > 100 
   AND rating > 100

たとえば、データベースエンジン(InnoDB)は、価格、幅、評価のインデックスを使用してこのクエリをどのように処理しますか?

エンジンは最初に価格を処理し、次に幅と評価で結果をフィルタリングしますか?これは、最初にO(log(n)+ k)を意味し、kは結果の数、nは製品テーブルのエントリの数、次にO(n)、次にO(n)であり、nは最後のすべての結果の数です。フィルタリング操作??

4

1 に答える 1

3

あなたは基本的にSQLオプティマイザーがどのように機能するかを尋ねています.指摘したように、それはSQLのバージョンによって異なり、依存します.

一般に (非常に広範囲に)、オプティマイザーはテーブルに関するメタデータを保持するため、意味のあるインデックスを選択できます。たとえば、テーブルに学生の性別と GPA が含まれている場合、オプティマイザーは常に GPA のインデックスを使用すると予想されます。ただし、すべて男子の学校でクエリを実行し、女性を検索する場合、オプティマイザは最初に性別列を検索する方が速いことに気付く場合があります (返されるレコードはほとんどないため)。また、あなたのテーブルが非常に小さい場合、オプティマイザーは「インデックスと一体、私はテーブル全体をスキャンするだけです」と言うかもしれません....

あなたの例では、個別の値がいくつあるかを考えてみてください。列はすべて整数ですか? その場合、オプティマイザーはメタデータをクエリして、「うーん、評価が 100 を超える行は 300 行しかなく、価格が 100 を超える行は 10,000 行しかありません。最初に評価を使用すると思います」と言うことができます... .

しかし、OMG ponies が指摘するように、それは依存します...

于 2013-01-20T16:22:45.187 に答える