元Oracle 使いだけど、 MySQL のSQL 実行計画について ちゃんと調べた

C0479b152c326746e911be790617f75b?s=47 katsuhisa_
March 23, 2018

元Oracle 使いだけど、 MySQL のSQL 実行計画について ちゃんと調べた

MANABIYA ( https://manabiya.tech ) で話した資料です。

C0479b152c326746e911be790617f75b?s=128

katsuhisa_

March 23, 2018
Tweet

Transcript

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

  2. 北野 勝久   : @katsuhisa__ #MANABIYA

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

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

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

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

  7. 英語が読めるサルでも分かる SQL 実行計画 _人人人人人人人人_ > 今日のテーマ <  ̄Y^Y^Y^Y^Y^Y^Y ̄ = SQL をどういう風に  

    実行するか?の計画 ↑   使ってるDB により、   計画の表現が違う SQL 実行計画
  8. Oracle さんの場合 #MANABIYA

  9. Oracle 実行計画の表示例  (プレゼン用に一部カットしています) -------------------------------------------------------------------------------------------- | Id | Operation | Name

    | Rows | Cost (%CPU) | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 2 (0) | | 1 | TABLE ACCESS FULL | DUAL | 1 | 2 (0) | -------------------------------------------------------------------------------------------- #MANABIYA
  10. Oracle 実行計画の処理 INDEX UNIQUE SCAN INDEX RANGE SCAN INDEX FULL

    SCAN INDEX FAST FULL SCAN TABLE ACCESS BY INDEX ROWID TABLE ACCESS FULL #MANABIYA
  11. Balanced Tree さえ理解していれば、 見れば意味がなんとなく分かる #MANABIYA

  12. MySQL さんの場合 #MANABIYA

  13. MySQL 実行計画の表示例  (プレゼン用に一部カットしています) +----------+-------+-----------------------+----------+---------+----------+ | table | type | possible_keys

    | key | rows | Extra | +----------+-------+-----------------------+----------+---------+----------+ | shops | ALL | NULL | NULL | 60 | NULL | +----------+-------+-----------------------+----------+---------+----------+ #MANABIYA
  14. MySQL 実行計画の処理 eq_ref const ref range index ALL #MANABIYA

  15. よくわからん #MANABIYA

  16. eq_ref const ref range index ALL MySQL 実行計画の処理 INDEX UNIQUE

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

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

    SCAN に相当 INDEX RANGE SCAN に相当 FULL TABLE SCAN に相当 INDEX FULL SCAN に相当 #MANABIYA
  19. MySQL の実行計画ちゃんと知らなかった頃のワイ   「index うまく使えてるっぽいなー。」 +----------+---------+-----------------------+----------+---------+----------+ | table | type |

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

    possible_keys | key | rows | Extra | +----------+---------+-----------------------+----------+---------+----------+ | shops | index | NULL | NULL | 60 | NULL | +----------+---------+-----------------------+----------+---------+----------+
  21. ぜんぜんindex うまく使えてない #MANABIYA

  22. (教訓)どうすれば失敗せずに済んだか? • あらかじめ、INDEX UNIQUE SCAN に相当する 別概念の存在を知っていれば、違和感を感じられた。 • そもそも、type 列だけでなく

    他の列もちゃんと読んでいれば、 index の意味を疑うことができた。
  23. 良いSQL ライフを。 だれかMySQL のtype 列の仕様の歴史に詳しい人がいたら、 今日取り上げたネーミングの背景について教えてください #MANABIYA

  24. Copyright (C) 2018 Studist Corporation. All Rights Reserved 24 #devsumiE

    自己紹介 スタディストでは、 いっしょに闘ってくれるエンジニアを常に募集中