存在チェック(該当データがあるのか)の処理について忘れがちなのでメモします。
SQLの内容それぞれに対して、ローカル環境ですが、クエリの実行時間を調べてみました。
結論から言うと、SELECT EXISTS( SELECT * FROM ○○ WHERE ××)のような書き方が速いですね。
SELECT
*
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25"
まず、WHERE句を含んだSELECT文です。カラムは全てのカラムが対象です。
クエリの実行時間: 0.0054 秒
SELECT
id
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25"
次に、 上と同じくWHERE句を含んだSELECT文ですが、こちらはカラムがidのみ対象です。
クエリの実行時間: 0.0044 秒
SELECT
*
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25"
LIMIT 1
さっきのカラム全選択にLIMIT 1を付けたもの。
クエリの実行時間: 0.0009 秒
SELECT
id
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25"
LIMIT 1
カラムidのみでLIMIT 1。
クエリの実行時間: 0.0007 秒
SELECT EXISTS (SELECT
id
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25")
SELECT EXISTS( SELECT ~ ) でカラムにidを指定。
クエリの実行時間: 0.0009 秒
SELECT EXISTS (SELECT
*
FROM
driver_status
WHERE
driver_id = 1678
AND
created
BETWEEN
"2021-07-18 12:27:25" AND "2021-07-18 15:27:25")
SELECT EXISTS( SELECT ~ ) でカラムは全て。カラムは選択しないで全て取ってきた方がSELECT EXISTS( SELECT~)だと速いらしいです。
クエリの実行時間: 0.0003 秒