この MySQL ベンチマーク
シリーズはMySQL-Benchmarkタグから一覧できます。
最初の方で環境構築をしていて、その環境で実験しています。
実験で使うSSDを決めるために簡単な比較をしてみる
1回目のベンチマークではもともと持っていたIntelのNVMe SSD 760pを使ったものの、試しに …
[さらに読む]
この MySQL ベンチマーク
シリーズはMySQL-Benchmarkタグから一覧できます。
最初の方で環境構築をしていて、その環境で実験しています。
前回1Gbのネットワーク帯域がボトルネックになってしまうことがわかったので、10Gbの環境を作っていく
導入機器
コンシューマ向け(?)の …
[さらに読む]概要
8.0.22のリリースノートを見るとprepared statementの挙動が変わっているらしい。
特にこれが気になったので、試してみる
For a prepared statement of the form SELECT expr1, expr2, ... FROM table ORDER BY ?, passing an integer value N for the parameter no longer causes ordering of the results by the Nth expression in the select list; the results are no longer ordered, as is expected with ORDER BY constant.
どうやら8.0.22からはSELECT expr1, expr2, ... FROM table ORDER BY ? といったクエリをprepareして、placeholderにselect listの番号を表す数値Nを指定する場合にsortが効かなくなるらしい
実験
8.0.21, …
[さらに読む]sakaikさんのブログで今月の日付一覧を得るクエリを読んでいて、ここで紹介されているクエリが手元で実行できなかったので、メモ。
原因は手元の環境が8.0.17でVALUES()関数がなかったことが原因。
よく見るとvalues()関数でテーブルを作って、それを自己結合しつつ出力を作ってソートしている。
再帰CTEでシーケンスが作れるので、それを使っても良いかもなと思い、復習がてら書いてみました。
with recursive rec(V, D) as ( select 1, cast(date_format(@dt, '%Y-%m-01') as date) union all select V+1, date_add(D, interval +1 day) from rec where D < last_day(@dt) ) select D as `DATE` from rec; …[さらに読む]
MySQLで(他のDBMSは知らない)ある値のリストxを使ってテーブルからIN(x), NOT
IN(x)を使ってデータを取っても2つのクエリで全件を取ってこれないという話は有名だが、MySQL
Server Blogにantijoin
optimization
も含めた解説記事が出たので、これを機に(is null
,
is true
, in()
などとNULLに対する比較演算を整理してみる。
reference: https://mysqlserverteam.com/a-must-know-about-not-in-in-sql-more-antijoin-optimization/
結論
8.0.18がリリースされたのでHash Joinを試してみました。
dockerには8.0.18 imageはなかったのでcentos7にinstallして実験
先にまとめ
EXPLAIN ANALYZE
もしくはEXPLAIN
FORMAT=TREE:
で確認する
JOINアルゴリズムの選択をコスト計算で行っているかは不明
install
yum localinstall -y …[さらに読む]
MySQL8.0の機能を調べてまとめている。 Functional Key Partsについて読んだまとめ。
MySQL 8.0.13から関数index(functional key
parts)がサポートされる。
5.7以前ではカラムの値そのものかカラムのprefixでしかindexを作成することができなかったが、8.0.13からはテーブルに直接入っている値以外でもindexを作成することができるようになる。