SQLパフォーマンス詳解
前書き
SQLでは「何が欲しいか」だけ書き,「どう機能するか」を見ないで済むので嬉しい. 一般的には数KB
したがって,ノード内の順序と,ノードの順序という2つのレベルで順序が管理されている. INDEX UNIQUE SCANでは「木の走査」のみを行う. UNIQUE制約がなく値がUNIQUEではない可能性がある場合にこれを行う必要がある. TABLE ACCESS BY INDEX ROWIDでは加えてテーブルの読み込みも行う. TABLE SCAN自体はそれなりに早いので,大きめのINDEX RANGE SCANよりより大きなTABLE SCANの方が早いこともある.
UPPER(LAST_NAME)に対するインデックスが必要. 作成時点でのインデックスが不変ため,時間や乱数に依存する関数では正常に動作しなくなるため. 日付と時刻を別々に管理するとかすると,インデックスが難しくなる. code:disable_index.sql
SELECT last_name, first_name, employee_id
FROM employees
WHERE subsidiary_id = ?
AND last_name || '' LIKE ?
インデックスに追加されている列は自動的に理想的な順序で保存されるようになる. code:asc_desc.sql
CREATE INDEX sales_dt_pr
ON sales (sale_date ASC, product_id DESC)
必要な列だけ更新することが大切だが,ORMが全部の列を更新するようなクエリを発行してしまう場合があるので気をつける.