Skip to content
Naoya Tech
Go back

How SQL Really Runs: Logical Execution Order and Execution Plans

16:49 Database

Overview

SQL is written starting with SELECT, but SELECT is one of the last steps to run. This video follows two orders: the logical order that defines a query’s result, and the physical steps the database actually chooses, known as the execution plan. Knowing both explains why some queries fail and why others are slow.

Key Points

Chapters

概要

SQLはSELECTから書き始めますが、SELECTが実行されるのは最後の方です。この動画では2つの順序を追いかけます。クエリの結果を決める論理的な実行順序と、データベースが実際に選ぶ物理的な手順、つまり実行計画です。この2つを知ると、あるクエリがエラーになる理由や、別のクエリが遅い理由を説明できるようになります。

ポイント

  • 論理的な実行順序は FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BY、TOP です。別名はSELECTで作られるため、WHEREでは使えず、ORDER BYでは使えます。WHEREは元の行に、HAVINGは集計後の行に条件をかけます。
  • 実行計画はデータベース自身が作ります。統計情報をもとに最も安い経路を選び、キャッシュに保存します。推定プランと実際のプランが食い違うときは、統計情報が古くなっている合図です。
  • 実行計画は右から左へ読みます。テーブルの読み方は、悪い順にテーブルスキャン、インデックススキャン、インデックスシークです。キールックアップ、結合の種類(ネステッドループ、マージ、ハッシュ)、コストの割合からボトルネックを探します。
  • WHEREの中で列を関数で包むと、インデックスが使えなくなります。YEAR関数の代わりに日付の範囲で比べるようなサーガブルな書き方なら、インデックスを使えます。SQLヒントでデータベースの判断を上書きすることもできますが、あくまで応急処置です。
  • 25万行が10行になるまでを実例で追い、B-treeインデックスの仕組み、複合インデックスは左端の列から使うというルール、カバーリングインデックス、遅いクエリに出会ったときの手順も解説します。

チャプター

Watch on YouTube

Share this post on:

Previous Video
Ken Thompson: The Man Who Created Unix, grep, UTF-8 and Go
Next Video
Was Object-Oriented Programming a Mistake? A 35-Year History