存在チェックのSQL処理速度比較メモ

存在チェック(該当データがあるのか)の処理について忘れがちなのでメモします。
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 秒

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です