-1

私のテストテーブルには100万行あり、列idは1から100万までの自動生成された数値で、id列は一意のインデックスで、挿入時間を格納するtimestore列は、id範囲内で選択クエリを実行すると例:

select * from test where id > 345673 and id < 453267

実行時間 - 0.379 秒

2 つの日付の間で選択クエリを実行する場合

select * from test where timestore between '2014-12-28 16:59:50' and '2014-12-28 17:1:50'

実行時間 - 1.478 秒

2 番目のクエリが最初のクエリよりも時間がかかるのはなぜですか?

4

1 に答える 1

4

テーブルが日付ではなく id 列のみによってインデックス付けされていると仮定します。最初のクエリの実行時に、ID 345673 のインデックスに直接ジャンプし、その下のすべてをスキップできます。2 番目のクエリを実行すると、インデックスが作成されていないため、クエリはテーブル内の 100 万行すべてを読み取る必要があります。

timestore フィールドと ID フィールドをこの順序で使用してクラスター化インデックスを作成することをお勧めします。また、WHERE ステートメントを使用してクラスター化インデックスと同じ順序で timestore 句と ID 句を使用し、コンパイラがそのインデックスを確実に使用するようにしてください。

timestore-id クラスター化インデックスから、timestore または ID のみを個別に非クラスター化インデックスを作成することもできます。

于 2014-12-30T04:15:14.623 に答える