今回はSQLの書き方によって実行速度がどのくらい変わるのか簡単な実験をします。
最近バイトでSQLを書いている時、よく「WHERE句の記述の順序を変えたらどのくらいパフォーマンスが変わるのだろう?」と思っていたのでやってみました。
最近バイトでSQLを書いている時、よく「WHERE句の記述の順序を変えたらどのくらいパフォーマンスが変わるのだろう?」と思っていたのでやってみました。
目次
準備
1 |
CREATE TABLE (id integer primary key autoincrement, name text, grade integer); |
文字列型のname、数値型のgradeを持つ構造のテーブルを用意して、1,000,000件データを入れておきます。
nameは1つのアルファベット30文字を繋げた文字列を25種類(a〜y)生成します。gradeは0〜24までの数字を入れます。
実験内容
以下の2つのSQL文を比較します。
- SELECT * FROM SAMPLE_TABLE1 WHERE name = ‘aaa…’ AND grade = 1;
- SELECT * FROM SAMPLE_TABLE1 WHERE grade = 1 AND name = ‘aaa…’;
1.のSQL文は、最初にnameで文字列比較をして40,000件に絞り、その後にgradeで数値比較して1,600件に絞ります。すなわち、文字列比較回数は1,000,000回、数値比較回数は40,000回になります。
2.のSQL文は、最初にgradeで数値比較して40,000件に絞り、その後にnameで文字列比較して1,600件に絞ります。すなわち、文字列比較回数は40,000回、数値比較回数は1,000,000回になります。
数値より文字列の比較の方が処理時間は長くなるため、2つめの処理の方が速くなると予想されます。
結果・考察
結果は以下の通りです。100回試行した平均の数値です。
実行時間 | |
SQL1 | 0.0776s |
SQL2 | 0.0667s |
2. の方が0.01速いことがわかり、やはりWHERE句の順序により実行速度が変わることが確認できました。どのくらい速くなるかはデータ構造次第ですが、文字数が増えれば比較処理時間が増えるのでより差が開くと考えられます。