tom__bo’s Blog

MySQL!! MySQL!! @tom__bo

MySQL 8.0

MySQLのquery review helperを作ってみた

せっかくのGWなので、おもちゃを作りました。 Query Review Helperです。 github.com 背景 最近MySQLで実行されるクエリをレビューするタスクが異常に多くなってきました。 開発者の全員がindexやjoin, partition, limit offsetなどなどのハマりどころを知っ…

MySQL Benchmark-003 環境構築その3 SSD選択

この MySQL ベンチマーク シリーズはMySQL-Benchmarkタグから一覧できます。 最初の方で環境構築をしていて、その環境で実験しています。 実験で使うSSDを決めるために簡単な比較をしてみる 1回目のベンチマークではもともと持っていたIntelのNVMe SSD 760p…

MySQL Benchmark-002 環境構築その2 10Gb NIC導入

この MySQL ベンチマーク シリーズはMySQL-Benchmarkタグから一覧できます。 最初の方で環境構築をしていて、その環境で実験しています。 前回1Gbのネットワーク帯域がボトルネックになってしまうことがわかったので、10Gbの環境を作っていく 導入機器 NIC X…

8.0.22のprepared statementの調査続き1

tombo2.hatenablog.com ↑についてリノベ8.0.22で話した。 このとき、MTG中にそれぞれが試してみるとgoだと動く、rubyだと応答がなくなるという話をしていた。 tmtmさんがRuby, Cで追実験した結果をブログにしてくれていたので、僕もgoの結果を書いておこうと…

MySQL Benchmark-001 環境構築その1

今年の冬はお家ベンチマーク環境を暖房にする気持ちでベンチマークをやっていこうと思う。 まずは環境構築から。 環境 2年前に組んだこの構成のPCが2台あるので、これを今回のベンチマークサーバにする core i7 8700 (CPU 6core 12threads) Memory 32GB SSD:…

8.0.22でのprepared statementの挙動変化

概要 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 …

MySQLでredis storage engineを作った

MySQLのストレージエンジンはplugableになっていて、APIを実装すれば自作のストレージエンジンを組み込むことができる。 ということで、試しにRedisをストレージエンジンとして使うRedis Storage Engineを作りました。 github.com 途中で飽きてしまった ちま…

MySQLで今月の日付一覧を得る with 再帰CTE

sakaikさんのブログで今月の日付一覧を得るクエリを読んでいて、ここで紹介されているクエリが手元で実行できなかったので、メモ。 sakaik.hateblo.jp 原因は手元の環境が8.0.17でVALUES()関数がなかったことが原因。 よく見るとvalues()関数でテーブルを作…

NOT IN (Subquery)などにおけるNULL

MySQLで(他のDBMSは知らない)ある値のリストxを使ってテーブルからIN(x), NOT IN(x)を使ってデータを取っても2つのクエリで全件を取ってこれないという話は有名だが、MySQL Server Blogにantijoin optimizationも含めた解説記事が出たので、これを機に(is nu…

MySQL 8.0.18のHASH JOINを試した

8.0.18がリリースされたのでHash Joinを試してみました。 dockerには8.0.18 imageはなかったのでcentos7にinstallして実験 先にまとめ HASH JOINは等価条件のJOINでかつjoinするカラムにindexがない場合に採用される(ドキュメント1行目) HASH JOINしたかどう…

MySQL 8.0 Functional Key Parts

MySQL8.0の機能を調べてまとめている。 Functional Key Partsについて読んだまとめ。 dev.mysql.com MySQL 8.0.13から関数index(functional key parts)がサポートされる。 5.7以前ではカラムの値そのものかカラムのprefixでしかindexを作成することができな…

MySQL 8.0 Descending index

MySQL8.0の機能を調べてまとめている。 Descending indexについて読んだまとめ。 dev.mysql.com MySQL 8.0では、Descending index(DESC, 降順のindex)がサポートされるようになった。 これまではASC(昇順)のindexを逆順にスキャンすることはできたが、パフォ…

MySQL 8.0 Invisible indexes

MySQL8.0の機能を調べてまとめている。 invisible indexesについて読んだまとめ。 dev.mysql.com MySQL 8.0からはinvisible indexesがサポートされる。 invisible indexはoptimizerに使われないindexのこと。 optimizerから見て、visible(利用可能)かinvisib…

MySQL 8.0 Derived Table, Lateral Derived Table

MySQL8.0の機能を調べてまとめている。 Derived Table, Lateral Derived Tableについて読んだまとめ。 DERIVED TABLE LATERAL DERIVED TABLESや8.0の新機能を説明する前に、DERIVED TABLEについて説明する dev.mysql.com DERIVED TABLEとはFROM句のscope内で…

MySQL 8.0 GROUP BY関連の新機能

MySQL8.0の機能を調べてまとめている。 タイトルどおりGROUP BY ... WITH ROLLUPについてドキュメントを読んだまとめ。 GROUP BYで指定したカラム自体の全体の集約(超集約: super-aggregate)結果を返すWITH ROLLUP句で大きく2点の改良と機能追加があった. OR…

MySQL 8.0 新機能 Window Function

MySQL 8.0の新機能について調べてまとめています。 今回はWindow関数に関する章(https://dev.mysql.com/doc/refman/8.0/en/window-functions.html )を読んだまとめです。 window関数はクエリの結果から行ごとにその行に関連する計算を行う機能。 GROUP BYで…

MySQL 8.0新機能 CTE (Common Table Expression)

MySQL 8.0の新機能について調べてまとめました。 この記事は公式ドキュメントの以下のページの読んだまとめです。 dev.mysql.com サンプルのクエリもほぼドキュメントのものですが、手元の8.0.15で実行した結果をつけている場合もあります。場合によって説明…