記事検索

検索ワードを入力してください。
Sky Tech Blog
【SQL Server】オプティマイザの​インデックス選択根拠

【SQL Server】オプティマイザの​インデックス選択根拠

SQL Serverにおけるインデックスとオプティマイザについて紹介します。インデックスとオプティマイザの役割や、オプティマイザがインデックスを自動で選択する際の根拠について説明します。

今回はインデックスとオプティマイザに関して取り上げます。
SQL Serverの初心者向けの内容となっております。

インデックス・オプティマイザとは​...

まずは備忘録を兼ねてインデックス、オプティマイザの役割から復習します。
以下がそれぞれの役割です。

  • インデックス…データベース内のデータを効率的に検索し、アクセスする
  • オプティマイザ…効率よく最適化されたクエリの実行計画を決めて実行する

WITH句を使って指定のインデックスを使用することはできますが、毎度毎度インデックスを指定しているわけではありません。
そんな時には、オプティマイザがインデックスを選択して効率的に処理を進めます。

オプティマイザの​インデックス選択根拠...

先ほど申し上げましたように、オプティマイザは自動でインデックスを選択して効率的に処理を進めてくれます。
では、オプティマイザは何を基準にインデックスを選択するのでしょうか。

答えは"統計情報"です。

統計情報とはどのあたりにどういったデータがあるかというデータ分布や、レコード数や列数/列のサイズを表す情報のことです。
このような情報を元にして、オプティマイザはどのような操作を行えば、効率的に処理を実行できるか判断してくれるというわけですね。

統計情報の​更新タイミングに​ついて​...

統計情報はDBが更新されると常に最新のものになるのでしょうか?
答えはNOです。

統計情報の更新契機として以下の2つがあります。

  • ① UPDATE STATISTICSが実行されたとき。
  • ② 自動更新オプション(AUTO_UPDATE_STATISTICS または AUTO_UPDATE_STATISTICS_ASYNC)がONの時、テーブルのおよそ20%に相当するデータが更新された状態でUPDATE、SELECT、DELETE、MERGEが実行されたとき。
    (参照:https://learn.microsoft.com/ja-jp/archive/blogs/jpsql/on-12

②については自動更新オプションがONの状態であっても、20%相当のデータが更新されなければ統計情報が更新されないということですね。
また、注意点として20%に相当するデータが更新された際に更新されるわけではないため、20%のデータが更新された状態でUPDATEなどのDML文が実行された時に統計情報が更新されるということも念頭に置いておきたいです。

最後に​...

オプティマイザは効率的なインデックスを選択してくれますが、それが常に最善というわけではありません。
実際、以前対応した不具合の中でオプティマイザが非効率的なインデックスを選択してしまい、処理に時間がかかってタイムアウトが起こってしまう、といったものがありました。

オプティマイザは賢いものですが、その振る舞いには十分に注意して実装を進めていきたいものです。
また、調査時にもこのオプティマイザの振る舞いを予測することで、効率的な調査が期待できます。

以上です。最後まで読んでいただきありがとうございました。


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム