WEB+DB PRESS Vol.93 SQL 高速化ガイド
- 作者: 原田騎郎,吉羽龍太郎,松浦隼人,須藤涼介,生沼一公,森下雅章,前島真一,鍛治匠一,伊藤直也,のざきひろふみ,うらがみ,高山温,佐々木健一,わかめまさひろ,ひげぽん,遠藤雅伸,海野弘成,はまちや2,竹原,藤田正訓,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/24
- メディア: 大型本
- この商品を含むブログを見る
MySQLを主とした話でした。
スロークエリ、EXPLAINの説明、よくある問題などの説明がされており、とても良い内容でした。
(pt-query-digest は知らなかった)
以下は個人的に気になったとこ。
mysqldumpslow
mysqldumpslow -s t mysql-slow.log
ソートオプション
項目 | 説明 |
---|---|
t/at | 実行時/平均実行時間 |
l/al | ロック時間/平均ロック時間 |
r/ar | 送信行数/平均送信行数 |
c | カウント数順 |
スロークエリ改善の勘所
- keyがNULLになっているものをなくす(EXPLAINのkey)
- filesortをなくす
- rowsを減らす
- ソート条件に昇順と降順を混在させない
マルチカラムインデックスが利用されない
filesortの補足:Extraで確認可能
Extraの値 | 説明 |
---|---|
where | インデックス以外を利用してレコードの絞り込みを行なっている |
index | インデックスだけを利用して実行している。Covering Index を利用している |
filesort | インデックスを利用しないクイックソートを行なっている |
temporary | ソート時にテンポラリテーブルを利用している |
カバリングインデックス
カバリングインデックスが利用されている場合は、
EXPLAINの結果に Extra: Using index が出力される。
WEB+DB Press Vol.91 データ構造の基礎知識 が良い - rochefort’s blog
ページネーションでのOFFSET問題
OFFSET の値が大きくなると遅くなる。
大量データのページネーション実装したことないので気にしたことありませんでしたが、なるほど。
SELECT if, title, FROM articles ORDER BY published at DESC LIMIT 10 OFFSET 50000
対応方法は、WHERE句で絞り込む or idの降順でソート。
SELECT if, title, FROM articles WHERE id < 最後のid ORDER BY id DESC LIMIT 10