[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】インデックスを貼ったはずなのに速度が改善されない!? [Qiita_Trend] | Summary by TechDistill

> Source: Qiita_Trend
Execute Primary Source

// Problem

新卒エンジニアが、タスク管理システムの表示遅延を解消しようとした際に直面した問題である。
* 複合インデックスを導入したが、ステージング環境で速度が改善しなかった。
* オプティマイザが、tasksを駆動表とする誤った計画を選択した。
* tasks.statusの統計情報不足により、件数を128件(見積もり)と12,459件(実測)で誤認した。
* 結果、commentsへの高コストな行取得が約30万回発生した。

// Approach

エンジニアは、EXPLAIN ANALYZEを用いて実行計画と実測値の乖離を特定した。
* EXPLAIN ANALYZEで、見積もり行数と実測行数の乖離を確認した。
* tasks.statusに統計情報がないことが原因だと突き止めた。
* tasks.statusにインデックスを追加し、統計情報を自動更新させた。
* ヒストグラムやFORCE INDEX等の代替案と比較検討を行った。

// Result

インデックス追加により、オプティマイザが最適な計画を選択した。
* commentsを駆動表とする計画へ変更された。
* 実行時間が約3.4秒から約0.16秒へと大幅に短縮された。
* 行取得の総回数が約30万回から6,000回未満へと激減した。
* インデックスによる統計情報の自動更新を実現した。

Senior Engineer Insight

> インデックスの存在は、実行計画の最適化を保証しない。本件は、統計情報の欠如が「見積もり誤差」を生み、結合順序の誤選択を招いた典型例である。大規模環境では、データの分布が実行計画を左右する。検証環境で件数のみを揃えても、統計情報の特性により計画が再現できないリスクがある。リリース後のEXPLAIN ANALYZEによる実測確認を、標準プロセスに組み込むべきだ。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。