お待たせいたしました。ここでSQLの性能測定を行います。
sqlplus / as sysdba
SQL> alter system FLUSH BUFFER_CACHE;
SQL> connect TRY/TRY
set timing on
select * from TBL2 where col1 = 10000;
COL1 COL2
---------- ----------------------------------------------------------------------------------------------------
10000 10000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
経過: 00:00:00.09
SQL> connect / as sysdba
SQL> alter system FLUSH BUFFER_CACHE;
SQL> connect TRY/TRY
set timing on
select * from TBL3 where col1 = 10000;
COL1 COL2
---------- ----------------------------------------------------------------------------------------------------
10000 10000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
経過: 00:00:07.67
「TBL2」表は100万件のレコードが格納されており、「TBL3」表はTBL2表からcreate as select文、もしくはinsert select文で作成したので、同様に100万件のレコードが格納されています。セグメントのサイズも同じであることは演習1で確認済みでした。
しかし演習4では、同じSELECT文なのに実行時間に大きな差があることを確認できます。当たり前と言えば当たり前なので、熟練エンジニアの方には申し訳ない問いかもしれませんが、あえて聞きましょう。「なぜ、実行時間に差が出るのでしょうか?」
……前編はここまでにしておきます。次回は後編として、この「なぜ」を解明するために必要なSQLの実行計画の取得方法や確認方法について、そして、各表に対してレコード件数を問い合わせるSELECT文の速度差についての演習を予定しております。それではまた次回お会いしましょう!
【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
障害発生! 問題切り分けはスピード勝負
パフォーマンス向上の最短コースを知るCopyright © ITmedia, Inc. All Rights Reserved.