Slide 1

Slide 1 text

元Oracle 使いだけど、 MySQL のSQL 実行計画について ちゃんと調べた 株式会社スタディスト 北野 勝久 #MANABIYA

Slide 2

Slide 2 text

北野 勝久   : @katsuhisa__ #MANABIYA

Slide 3

Slide 3 text

SQL 実行計画つかったことある方 #MANABIYA

Slide 4

Slide 4 text

英語が読めるサルでも分かる SQL 実行計画 Parser Optimizer SQL Query Statistics SQL Executor

Slide 5

Slide 5 text

英語が読めるサルでも分かる SQL 実行計画 Parser Optimizer SQL Query Statistics SQL Executor SQL 実行計画つくるニキ

Slide 6

Slide 6 text

英語が読めるサルでも分かる SQL 実行計画 = SQL をどういう風に   実行するか?の計画 SQL 実行計画

Slide 7

Slide 7 text

英語が読めるサルでも分かる SQL 実行計画 _人人人人人人人人_ > 今日のテーマ <  ̄Y^Y^Y^Y^Y^Y^Y ̄ = SQL をどういう風に   実行するか?の計画 ↑   使ってるDB により、   計画の表現が違う SQL 実行計画

Slide 8

Slide 8 text

Oracle さんの場合 #MANABIYA

Slide 9

Slide 9 text

Oracle 実行計画の表示例  (プレゼン用に一部カットしています) -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU) | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 2 (0) | | 1 | TABLE ACCESS FULL | DUAL | 1 | 2 (0) | -------------------------------------------------------------------------------------------- #MANABIYA

Slide 10

Slide 10 text

Oracle 実行計画の処理 INDEX UNIQUE SCAN INDEX RANGE SCAN INDEX FULL SCAN INDEX FAST FULL SCAN TABLE ACCESS BY INDEX ROWID TABLE ACCESS FULL #MANABIYA

Slide 11

Slide 11 text

Balanced Tree さえ理解していれば、 見れば意味がなんとなく分かる #MANABIYA

Slide 12

Slide 12 text

MySQL さんの場合 #MANABIYA

Slide 13

Slide 13 text

MySQL 実行計画の表示例  (プレゼン用に一部カットしています) +----------+-------+-----------------------+----------+---------+----------+ | table | type | possible_keys | key | rows | Extra | +----------+-------+-----------------------+----------+---------+----------+ | shops | ALL | NULL | NULL | 60 | NULL | +----------+-------+-----------------------+----------+---------+----------+ #MANABIYA

Slide 14

Slide 14 text

MySQL 実行計画の処理 eq_ref const ref range index ALL #MANABIYA

Slide 15

Slide 15 text

よくわからん #MANABIYA

Slide 16

Slide 16 text

eq_ref const ref range index ALL MySQL 実行計画の処理 INDEX UNIQUE SCAN に相当 INDEX RANGE SCAN に相当 FULL TABLE SCAN に相当 #MANABIYA

Slide 17

Slide 17 text

eq_ref const ref range index ALL MySQL 実行計画の処理 INDEX UNIQUE SCAN に相当 INDEX RANGE SCAN に相当 ← じゃあ、これなに? FULL TABLE SCAN に相当 #MANABIYA

Slide 18

Slide 18 text

eq_ref const ref range index ALL MySQL 実行計画の処理 INDEX UNIQUE SCAN に相当 INDEX RANGE SCAN に相当 FULL TABLE SCAN に相当 INDEX FULL SCAN に相当 #MANABIYA

Slide 19

Slide 19 text

MySQL の実行計画ちゃんと知らなかった頃のワイ   「index うまく使えてるっぽいなー。」 +----------+---------+-----------------------+----------+---------+----------+ | table | type | possible_keys | key | rows | Extra | +----------+---------+-----------------------+----------+---------+----------+ | shops | index | NULL | NULL | 60 | NULL | +----------+---------+-----------------------+----------+---------+----------+

Slide 20

Slide 20 text

MySQL の実行計画ちゃんと知らなかった頃のワイ   「index うまく使えてるっぽいなー。」 +----------+---------+-----------------------+----------+---------+----------+ | table | type | possible_keys | key | rows | Extra | +----------+---------+-----------------------+----------+---------+----------+ | shops | index | NULL | NULL | 60 | NULL | +----------+---------+-----------------------+----------+---------+----------+

Slide 21

Slide 21 text

ぜんぜんindex うまく使えてない #MANABIYA

Slide 22

Slide 22 text

(教訓)どうすれば失敗せずに済んだか? ● あらかじめ、INDEX UNIQUE SCAN に相当する 別概念の存在を知っていれば、違和感を感じられた。 ● そもそも、type 列だけでなく 他の列もちゃんと読んでいれば、 index の意味を疑うことができた。

Slide 23

Slide 23 text

良いSQL ライフを。 だれかMySQL のtype 列の仕様の歴史に詳しい人がいたら、 今日取り上げたネーミングの背景について教えてください #MANABIYA

Slide 24

Slide 24 text

Copyright (C) 2018 Studist Corporation. All Rights Reserved 24 #devsumiE 自己紹介 スタディストでは、 いっしょに闘ってくれるエンジニアを常に募集中