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

データベースの気持ちになろう (ハンズオン)

データベースの気持ちになろう (ハンズオン)

More Decks by NearMeの技術発表資料です

Other Decks in Programming

Transcript

  1. 0
    データベースの気持ちになろう
    (ハンズオン)
    2022-09-07 第13回NearMe技術勉強会
    Kenji Hosoda

    View full-size slide

  2. 1
    こちらのNotebookでハンズオンします
    https://gist.github.com/kenji4569/b0523114f4b0b4a30a911c0e864c70a4

    View full-size slide

  3. 2
    下準備
    ● JupyterLabの起動
    ● Docker Engineのインストール
    ● MySQLコンテナの起動
    ● MySQLへの接続
    ○ テーブルの作成
    ○ レコードの挿入
    ○ レコードの選択

    View full-size slide

  4. 3
    3
    よく使う調査コマンド
    ● SHOW CREATE TABLE でテーブル定義の表示
    ● EXPLAINでSQLの実行計画を表示

    View full-size slide

  5. 4
    4
    インデックスがどう効くか確認
    ● 100000件のレコード挿入
    ● インデックスを貼ってないフィールドによって1レコードを取得した時の実行時間を確認
    ● 200000件、300000件の場合、実行時間はどう増えるか?
    ● ID(プライマリキー)によって1レコードを取得した時はどうなるか?
    ● インデックスを貼ると検索時間はどう変わるか?
    id name
    1 一郎
    2 二郎
    3 三郎
    プライマリキー
    B+ツリー
    クラスタインデックス
    (リーフ=”レコード”)
    セカンダリインデックス
    (リーフ=プライマリキーの値)
    リーフ

    View full-size slide

  6. 5
    5
    マルチカラムインデックスの挙動を確認
    ● 複数のフィールドによって1つのレコードを取得
    ● 片方のフィールドだけインデックスを貼って実行時間を確認
    ● マルチカラムインデックスを貼って実行時間を確認
    ● 片方のフィールドで絞り込んでオフセットを指定してレコードを取得した場合の実行時間を確認
    id last_name first_name
    1 一山 一郎
    2 一山 二郎
    3 二山 一郎

    View full-size slide

  7. 6
    6
    ソートを加えた時の挙動を確認
    ● インデックスが効く場合
    ● ファイルソートが発生する場合
    ● 片方のフィールドで絞り込んでソートした場合
    ● マルチカラムインデックスではなく片方のフィールドだけインデックスを貼った場合

    View full-size slide

  8. 7
    7
    テーブル結合時のインデックスの挙動を確認
    ● 基本的なテーブル結合の説明(INNER JOIN、LEFT JOIN)
    ● 結合時にインデックスが効いている場合
    ● 結合時にインデックスが効いてない場合
    出典:https://www.codeproject.com/articles/33052/visual-representation-of-sql-joins

    View full-size slide