#バドシス 〜 日々のことを続く限り書いてみようと思って 〜

頑張って日々のことを書いていこうと思います。

MySQLまとめ

実践ハイパフォーマンスMySQL 第3版

 

MySQLを業務で使っていく上で「へー!」と思ったことをまとめていきます。
こんな常識も抑えとけ!みたいなのがあればお気軽にコメントください!

 

mysqldump

データ連携などでよく使いますよね。

 

mizominton.hatenablog.jp

 

mizominton.hatenablog.jp

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の最適化

mizominton.hatenablog.jp

 

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版