🔩 ねじき教室 Go と Web の教室

Part 4

データベースと SQL

Web アプリの性能問題の大半はデータベースで起きます。 つまり ISUCON の主戦場です。 この Part では SQL の読み書きを身につけ、Go のプログラムからデータベースを使えるようにします。 最後に、インデックスがなぜ速いのかを競プロでおなじみの計算量の言葉で理解します。

  1. なぜデータベースが要るのか 競プロにはなかった「データを残す」という要求から出発して、リレーショナルデータベースと SQL を導入します。
  2. SELECT でデータを取り出す 手元に MySQL を用意し、SELECT、WHERE、ORDER BY、LIMIT でデータを取り出せるようになります。
  3. テーブルを作って書き込む CREATE TABLE の読み方と、INSERT、UPDATE、DELETE によるデータの書き込みを学びます。
  4. 複数のテーブルと JOIN テーブルを分ける理由と、JOIN で複数のテーブルを突き合わせて読む方法を学びます。
  5. 集計する COUNT などの集計関数と、GROUP BY、HAVING によるグループごとの集計を学びます。
  6. Go から SQL を使う database/sql で Go プログラムから MySQL を読み書きし、SQL インジェクションを防ぐ書き方を学びます。
  7. インデックスはなぜ速いのか インデックスの正体である B+木を競プロの二分探索から理解し、EXPLAIN で実行計画を確かめます。
  8. トランザクション 複数の書き込みを「全部やるか、全部やらないか」にまとめるトランザクションを学びます。