For Want Of A Better Word

[mysql]集合差を求める場合の処理速度比較(NOT IN(), NOT EXISTS, LEFT JOIN … IS NULL)

   

 

http://qiita.com/Hiraku/items/71873bf31e503eb1b4e1

こういう所とか

http://rzpg.blogspot.jp/2011/02/mysqlnot-innot-exists.html

こういう所で、集合差をとる場合(Aの集合には存在しないレコードをとると。)の処理のパターンが紹介されており、

それぞれ速度差があるということで、手元で試してみた。

 

状況として、「当月のアクティブユーザーで、先月アクセスしていないユーザー」というイメージ

※いちおうキャッシュしないように「SQL_NO_CACHE」で。。

結果

 

NOT IN   14.96秒

NOT EXISTS 11.76 秒

LEFT JOIN    5.05 秒

 

LEFT JOIN に対し、NOT EXISTS は2倍 、NOT IN は3倍という感じ。

LEFT JOIN is NULLがとりあえずの手という所でしょうか。

 

 

参考 SQL

NOT IN(…):

 

NOT EXISTS(….),

 

 

LEFT JOIN … IS NULL

 

 

 - mysql

  関連記事

[mysql]どういうSQL文のとき、どういうインデックスが使われるのか整理

mysqlのチューニングをしていて、どうしてもインデックスが、どの指定の時に何が …

[sql][mysql]特定グループ毎に最大の値を持つ行を取得する(相関サブクエリー、JOIN)

標題のとおり ぱっと考えるとMAX()でとればいいように思えるが、GROUP B …

【MySQL】query_logを取得した場合の速度影響

あくまでWEB画面表示について。 環境は下記。 Linux CentOs7.1 …

[sql][mysql]URLのパラーメータ削除 + index.html の 削除

よく忘れるのでメモ。 ログを集計するときに、パラメータを削除したり、URLの/と …

xamppの旧バージョンダウンロード

案件ごとにいろんなphp apacheのバージョンを組み合わせるのが面倒臭い。 …