Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

katsuhisa_
March 23, 2018

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

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

katsuhisa_

March 23, 2018
Tweet

More Decks by katsuhisa_

Other Decks in Technology

Transcript

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

    View Slide

  2. 北野 勝久   : @katsuhisa__
    #MANABIYA

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

      使ってるDB により、
      計画の表現が違う
    SQL 実行計画

    View Slide

  8. Oracle さんの場合
    #MANABIYA

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. MySQL さんの場合
    #MANABIYA

    View Slide

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

    View Slide

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

    View Slide

  15. よくわからん
    #MANABIYA

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide