この 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; …[さらに読む]
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を作成することができるようになる。
MySQL8.0の機能を調べてまとめている。
Descending indexについて読んだまとめ。
MySQL 8.0では、Descending index(DESC, 降順のindex)がサポートされるようになった。 これまではASC(昇順)のindexを逆順にスキャンすることはできたが、パフォーマンス上のペナルティがあった。 Descending indexを使うことで、降順のアクセスでも正順でスキャンすることができる。 optimizerはDESCを含むマルチカラムindexであってもコストを考慮してこれを利用してくれる。
サンプル
c1, c2カラムにasc, descの組み合わせでカラムを作った。
index名はasc, descの頭1文字をとってaかd
mysql> …[さらに読む]
MySQL8.0の機能を調べてまとめている。
invisible indexesについて読んだまとめ。
MySQL 8.0からはinvisible indexesがサポートされる。
invisible indexはoptimizerに使われないindexのこと。
optimizerから見て、visible(利用可能)かinvisible(利用不可)かを選択できるようになった。
invisible indexを利用することで、indexを削除しても影響がないかを確認することが容易になる。
これは結構ありがたい機能で、行数が多かったり、更新頻度が高いテーブルではindexの削除・作成は非常にコストがかかるし、下手にindexを外すとクエリをつまらせてサービスダウンになることもある。
…
[さらに読む]