無限ノック › SAP 練習問題一覧 › 問題
SAP既存のソリューションの継続的改善

ある会社はAmazon Aurora MySQLを使用して、Webアプリケーションのデータベースを運用しています。クエリの実行計画を解析したところ、頻繁に実行される特定の読み取りクエリでフルテーブルスキャンが発生しており、全体のパフォーマンスを低下させていることが分かりました。アプリケーションコードを変更せずに、クエリのパフォーマンスを劇的に向上させる方法はどれですか。

A
Auroraのクエリオプティマイザを無効にし、強制的に全インデックスを使用する実行計画に変更するパラメータを設定する
クエリオプティマイザを強制的に操作することは非常に難易度が高く、クエリによっては逆に性能が悪化するリスクがあるため避けるべきです。
B
クエリがスキャンしているカラムに対して適切なインデックスを作成し、Auroraのクエリオプティマイザが自動的にインデックスを利用するようにする
✓ 正解
インデックス作成は、コード変更なしでSQLの実行効率を根本から改善できる最も効果的なデータベース最適化手法です。
C
インスタンスサイズを現状の最大サイズまでスケールアップして、フルテーブルスキャンにかかる物理的な時間を短縮する
インスタンスのスケールアップは、あくまでリソース増強による回避策です。フルスキャンという根本原因を解決しない限り、データ量の増大に伴って再び性能問題が発生するため、解決策として不十分です。
D
AuroraデータベースをPostgreSQL互換の別のクラスターに移行し、異なるオプティマイザを利用して実行効率を改善する
データベースエンジン自体を変更するのは、アプリケーションのSQLの互換性リスクが極めて高く、「コード変更なしで」という要件を満たせません。

解説

フルテーブルスキャンが発生する根本原因は、クエリの検索条件に使われるカラムに適切なインデックスが存在しないことです。インデックスはアプリケーションコードを変更せずDB管理者レベルで追加でき、クエリオプティマイザが自動的にインデックス検索を選択するようになります。これはパフォーマンス改善の最も基本的かつ効果的な手法です。 クエリオプティマイザを無効にして全インデックスを強制使用させるパラメータはAurora MySQLには存在せず、オプティマイザを無効化することはクエリプランの最適化を妨げてパフォーマンスをさらに悪化させるリスクがあります。 インスタンスをスケールアップするとフルテーブルスキャンの所要時間が若干短縮される場合がありますが、根本的な解決にはならずデータ量の増加に伴い問題が再発します。コスト面でも非効率な対処法です。 PostgreSQL互換クラスターへの移行は大規模な移行作業とダウンタイムリスクを伴います。同じクエリパターンで同じインデックスがなければ、異なるオプティマイザを使っても同様のパフォーマンス問題が発生します。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでSAPを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← SAP の問題一覧に戻る