Memo

メモ > 技術 > データベース: MySQL > チューニング(実行計画)

チューニング(実行計画)
漢(オトコ)のコンピュータ道: MySQLのEXPLAINを徹底解説!! http://nippondanji.blogspot.com/2009/03/mysqlexplain.html MySQL EXPLAINの見方 - Qiita https://qiita.com/Stuffy86/items/809540b73cacde951997 例えば以下のようなSQLがあったとして、
SELECT id, created, name FROM students LIMIT 100;
このSQLの直前に「EXPLAIN」を付けると実行計画を表示でき、この情報をもとにボトルネックを探してチューニングすることができる 一例だが、以下のように表示される
> EXPLAIN SELECT id, created, name FROM students LIMIT 100; +------+-------------+----------+------+---------------+------+---------+------+-------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+----------+------+---------------+------+---------+------+-------+-------+ | 1 | SIMPLE | students | ALL | NULL | NULL | NULL | NULL | 70288 | | +------+-------------+----------+------+---------------+------+---------+------+-------+-------+ > EXPLAIN SELECT id, created, name FROM students WHERE name = '山田太郎' LIMIT 100; +------+-------------+----------+------+----------------+----------------+---------+-------+------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+----------+------+----------------+----------------+---------+-------+------+-----------------------+ | 1 | SIMPLE | students | ref | index_name_sei | index_name_sei | 767 | const | 398 | Using index condition | +------+-------------+----------+------+----------------+----------------+---------+-------+------+-----------------------+
結果の意味は以下のとおり ひとまずは「select_type」と「type」を確認すると良さそう ■id 実行順序 select_typeとセットで確認する ■select_type SIMPLE … サブクエリやユニオンが含まれていない、単純なSELECT文 SUBQUERY … サブクエリに指定されているSELECT文 PRIMARY … ユニオンの1つ目のSELECT文 UNION … ユニオンの2つ目以降のSELECT文 UNION_RESULT … ユニオンの無名一時テーブルから結果を取得するSELECT文 ■table 対象のテーブル名 ■type テーブルへのアクセス方法 const … インデックスによる検索。最速 eq_ref … JOINで用いられる、インデックスによる検索 ref … ユニーク(PRIMARY or UNIQUE)ではないインデックスを使って等価検索(WHERE key = value)を行なった検索 range … インデックスを用いた範囲検索 index … フルインデックススキャン。インデックスがはられていること以外はALLと同じなので遅い ALL … フルテーブルスキャン。インデックスがまったく利用されていないので改善が必要。遅い ■possible_keys 検索に使用できるインデックス 「NULL」の場合は参照するインデックスが無い ■key 検索に使用されたインデックス ■key_len 検索に使用されたインデックスの長さ ■ref 検索条件でkeyと比較されている値やカラムの種類 定数が指定されている場合は「const」と表示される ■rows テーブルから取得される行数の見積もり 大まかな見積もりなので正確では無い ■Extra クエリを実行するために、どのような戦略を選択したかを示す 以下は一例 Using where … 頻繁に出力される追加情報。WHERE句に検索条件が指定されており、なおかつインデックスを見ただけではWHERE句の条件を全て適用することができない場合 Using index … クエリがインデックスだけを用いて解決できることを示す Using filesort … filesort(クイックソート)でソートを行っていることを示す Using temporary … JOINの結果をソートしたり、DISTINCTによる重複の排除を行う場合など、クエリの実行にテンポラリテーブルが必要なことを示す。 ■メモ 引き続き確認したい あなたの遅延はどこから? SQLから! 〜患部に止まってすぐ効くSQLレビューチェックリスト 年初め特大サービス号〜 - ANDPAD Tech Blog https://tech.andpad.co.jp/entry/2023/01/12/100000 MySQLのExplainを確認する - woshidan's blog https://woshidan.hatenablog.com/entry/2015/06/20/165817 MySQLのexplainとかについてしらべたときのメモ - Qiita https://qiita.com/lastcat_/items/de7b530a94fbcf9ba646 漢(オトコ)のコンピュータ道: MySQLのEXPLAINを徹底解説!! http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html 漢(オトコ)のコンピュータ道: MySQLを高速化する10の方法 http://nippondanji.blogspot.jp/2009/02/mysql10.html ヤフー社内でやってるMySQLチューニングセミナー大公開 https://www.slideshare.net/techblogyahoo/mysql-58540246 Cygamesを支えるPHPと、その高速化の取り組み // Speaker Deck https://speakerdeck.com/cygames/cygameswozhi-eruphpto-sofalsegao-su-hua-falsequ-rizu-mi 秒間100万クエリを受け付ける大規模ソーシャルゲームのバックエンドDBシステムの設計・運用ノウハウ // Speaker Deck https://speakerdeck.com/cygames/miao-jian-100mo-kueriwoshou-kefu-keruda-gui-mo-sosiyarugemufalsebatu... MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ http://techlife.cookpad.com/entry/2017/04/18/092524 MySQLでWhere句内でOR演算子を使うと「インデックスが効かなくなる」は本当か https://zenn.dev/nakasone/articles/ce989fa4cbe4c2 これだけ見れば大丈夫!ーMySQLパフォーマンス監視のツボ(クエリ編) | 株式会社インフィニットループ技術ブログ http://www.infiniteloop.co.jp/blog/2012/03/mysql-tuning-cacti-query/ これだけ見れば大丈夫!ーMySQLパフォーマンス監視のツボ(システム編) | 株式会社インフィニットループ技術ブログ https://www.infiniteloop.co.jp/blog/2013/08/mysql-tuning-cacti-system/ MySQL クエリーキャッシュ 【チューニング方法とかも】 - Qiita https://qiita.com/ryurock/items/9f561e486bfba4221747 MySQL クエリーキャッシュ 【チューニング方法とかも】 - Qiita https://qiita.com/ryurock/items/9f561e486bfba4221747 DSAS開発者の部屋:クエリキャッシュは切ったほうがいいんじゃなイカ? http://dsas.blog.klab.org/archives/52021866.html MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ] https://techblog.raccoon.ne.jp/archives/1627262796.html SQLを速くするぞ―お手軽パフォーマンス・チューニング https://mickindex.sakura.ne.jp/database/db_optimize.html データベースの仕組み(アーキテクチャ)をざっくり理解する https://zenn.dev/revenuehack/articles/dc5a901fbe90e6 MySQLで全文検索機能を使う際のパフォーマンスについて調査してみた - iimon tech blog https://tech.iimon.co.jp/entry/2023/12/01/113000

Advertisement