MySQLまとめ
MySQLを業務で使っていく上で「へー!」と思ったことをまとめていきます。
こんな常識も抑えとけ!みたいなのがあればお気軽にコメントください!
mysqldump
データ連携などでよく使いますよね。
Where句について
WHERE句のORの後ろはINDEXが効かない
見出しの通り。
設定するなら条件の最後が良さげですね。
(1)DELETE FROM 表名 WHERE 列名 IN(値1,値2,値3)
(2)DELETE FROM 表名 WHERE 列名=値1 OR 列名=値2 OR 列名=値3
(3)DELETE FROM 表名 WHERE 列名=値1
DELETE FROM 表名 WHERE 列名=値2
DELETE FROM 表名 WHERE 列名=値3
(3)は構文解析だけでなく、何度もサーバとのやり取りが発生するので、オーバヘッドが多くなります。(2)はORでつなげた条件が、INと等価であることがDBMSで判断できるか否かで、処理時間がINと同等になるか劣るかになります。
実際にそこまでDBMSで判断できないケースは、少なくありません。(1)IN条件であることが明らかなので、DBMSから見ればオーバヘッドは少ないです。
ただし、他の方も書いていますが、範囲条件にできるものをIN条件にしているなら、範囲条件にした方が早いです。
WHERE句の速度について -下記のSQLではどちらが高速でしょうか?1)DE- MySQL | 教えて!goo
IN句の方がOR句より早い
MySQL5.6ではそのような結果が出ました。
昔はORの方が早かったような・・・。
これはそのうち深堀りしたい。
MySQLの最適化
- 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/25
- メディア: 大型本
- この商品を含むブログ (7件) を見る