お待たせいたしました。ここで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文の速度差についての演習を予定しております。それではまた次回お会いしましょう!
Copyright © ITmedia, Inc. All Rights Reserved.