LoginSignup
7
2

More than 5 years have passed since last update.

大容量のDBに対するSELECT文のWHERE句でカラムに処理を加えると遅くなる。

Last updated at Posted at 2018-10-12

例:前日のevent_idを1000件取得する

取得するDBのカラムに対して、処理しつつ取得すると遅くなります。
ついうっかりやってしまう書き方なので、備忘録として残したいと思います。

遅いSQL

遅いSQL
SELECT
  event_id
FROM
  events
WHERE
  DATE(event_datetime) = ADDDATE(CURRENT_DATE(), -1)
LIMIT 1000
;

実行時間:20分たっても返ってこないのであきらめました。

加工しない場合と比べると段違いの速度差です。。

早いSQL
SELECT
  event_id
FROM
  events
WHERE
  event_datetime
    BETWEEN
      ADDDATE(CURRENT_DATE(), -1)
    AND
      CURRENT_DATE() - INTERVAL 0.001 SECOND_MICROSECOND
LIMIT 1000
;

実行時間:約 0.012秒

参考:http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink-index
参考のリンク先、消えてました・・・。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2