Ruby で書かれた Tuple-at-a-time 方式のクエリエクスキューター
RDBMS がどのようにクエリを実行しているのか、なぜインデックスが重要なのかを説明するための教材。
クエリを実行して遊ぶにはテストデータの準備が必要です。
テストデータとして ISUCON9 予選問題のデータを流用しています。 https://github.com/isucon/isucon9-qualify
まず、上記リポジトリの手順に従って webapp/sql/initial.sql
を生成し、webapp/sql/init.sh
を実行して MySQL にデータを投入してください。
このとき、画像データのダウンロードや展開は不要です。
MySQL へデータが入ったら、このリポジトリ内の dump.rb
を実行して data/
以下にテストデータを書き出してください。
100MB くらいの JSON ファイルが書き出されます。
いくつかの基本的なプランオペレーターと、それらを使ったクエリ実行プランのサンプルが含まれています。
ISUCON9 予選問題のアプリケーションコードに含まれるクエリを再現してみたり、より高速なプランを作るためにセカンダリインデックスを増やしてみたりして遊びましょう。
JOIN 関連のオペレーターを実装してみてもおもしろいでしょう。