2

私はこのクエリを使用しています:

SELECT SENSOR_ID, (BOX_COUNT * 6) AS BOX_COUNT, `TIME` AS `TIMESTAMP` 
FROM lu_sensor_log INNER JOIN lu_sensors S 
ON S.MACHINE_ID=1 AND S.ID=SENSOR_ID 
WHERE `TIME` >= '2013-09-04 15:30:00' AND `TIME` <= ' 2013-09-04 17:00:00' 
ORDER BY `TIME` ASC

これは非常に単純なクエリであり、複雑なことは何もありません。以前は、データベース テーブルに と のペア インデックスがSENSOR_IDありTIMEました。このクエリが完了するまでに (平均で) 4 秒かかります。SENSOR_IDそれ以来、ペアのインデックスを削除し、列に個々のインデックスを設定しましたTIME。これで、クエリはほぼ瞬時に実行されます。

違いについて Google で簡単に検索してみましたが、ある方法が他の方法よりも高速である理由の具体的な証拠を見つけることができないようです。

誰でも私のためにこれを片付けてもらえますか? 単一列インデックスが同じ列のペア インデックスよりもはるかに高速なのはなぜですか? (もちろん、この場合はより高速です)。

どうもありがとう。

4

1 に答える 1

1

ペアインデックスを使用していませんでした。一度に 1 つの列に基づいてデータを制限しています。一度に両方ではありません。

実際、句TIMEのためにインデックスを使用しているだけです。句がさらに制限WHEREする場合、ペアのインデックスはクエリを高速化します。WHERESENSOR_ID

どのインデックスが実際に使用されているかを確認するには、クエリの実行計画を確認する必要があります。

于 2013-09-05T12:00:27.757 に答える