MANABIYA ( https://manabiya.tech ) で話した資料です。
元Oracle 使いだけど、MySQL のSQL 実行計画についてちゃんと調べた株式会社スタディスト 北野 勝久#MANABIYA
View Slide
北野 勝久 : @katsuhisa__#MANABIYA
SQL 実行計画つかったことある方#MANABIYA
英語が読めるサルでも分かる SQL 実行計画ParserOptimizerSQL QueryStatisticsSQL Executor
英語が読めるサルでも分かる SQL 実行計画ParserOptimizerSQL QueryStatisticsSQL ExecutorSQL 実行計画つくるニキ
英語が読めるサルでも分かる SQL 実行計画= SQL をどういう風に 実行するか?の計画SQL 実行計画
英語が読めるサルでも分かる SQL 実行計画_人人人人人人人人_> 今日のテーマ < ̄Y^Y^Y^Y^Y^Y^Y ̄= SQL をどういう風に 実行するか?の計画↑ 使ってるDB により、 計画の表現が違うSQL 実行計画
Oracle さんの場合#MANABIYA
Oracle 実行計画の表示例 (プレゼン用に一部カットしています)--------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Cost (%CPU) |--------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 2 (0) || 1 | TABLE ACCESS FULL | DUAL | 1 | 2 (0) |--------------------------------------------------------------------------------------------#MANABIYA
Oracle 実行計画の処理INDEX UNIQUE SCANINDEX RANGE SCANINDEX FULL SCANINDEX FAST FULL SCANTABLE ACCESS BY INDEX ROWIDTABLE ACCESS FULL#MANABIYA
Balanced Tree さえ理解していれば、見れば意味がなんとなく分かる#MANABIYA
MySQL さんの場合#MANABIYA
MySQL 実行計画の表示例 (プレゼン用に一部カットしています)+----------+-------+-----------------------+----------+---------+----------+| table | type | possible_keys | key | rows | Extra |+----------+-------+-----------------------+----------+---------+----------+| shops | ALL | NULL | NULL | 60 | NULL |+----------+-------+-----------------------+----------+---------+----------+#MANABIYA
MySQL 実行計画の処理eq_refconstrefrangeindexALL#MANABIYA
よくわからん#MANABIYA
eq_refconstrefrangeindexALLMySQL 実行計画の処理INDEX UNIQUE SCAN に相当INDEX RANGE SCAN に相当FULL TABLE SCAN に相当#MANABIYA
eq_refconstrefrangeindexALLMySQL 実行計画の処理INDEX UNIQUE SCAN に相当INDEX RANGE SCAN に相当← じゃあ、これなに?FULL TABLE SCAN に相当#MANABIYA
eq_refconstrefrangeindexALLMySQL 実行計画の処理INDEX UNIQUE SCAN に相当INDEX RANGE SCAN に相当FULL TABLE SCAN に相当INDEX FULL SCAN に相当#MANABIYA
MySQL の実行計画ちゃんと知らなかった頃のワイ 「index うまく使えてるっぽいなー。」+----------+---------+-----------------------+----------+---------+----------+| table | type | possible_keys | key | rows | Extra |+----------+---------+-----------------------+----------+---------+----------+| shops | index | NULL | NULL | 60 | NULL |+----------+---------+-----------------------+----------+---------+----------+
ぜんぜんindex うまく使えてない#MANABIYA
(教訓)どうすれば失敗せずに済んだか?● あらかじめ、INDEX UNIQUE SCAN に相当する別概念の存在を知っていれば、違和感を感じられた。● そもそも、type 列だけでなく他の列もちゃんと読んでいれば、index の意味を疑うことができた。
良いSQL ライフを。だれかMySQL のtype 列の仕様の歴史に詳しい人がいたら、今日取り上げたネーミングの背景について教えてください#MANABIYA
Copyright (C) 2018 Studist Corporation. All Rights Reserved 24#devsumiE自己紹介スタディストでは、いっしょに闘ってくれるエンジニアを常に募集中