脱力系備忘録BloG ホーム »SQLite3でUNIQUE制約とCREATEで作成したインデックスに違いがあるのか調べてみた

SQLite3でUNIQUE制約とCREATEで作成したインデックスに違いがあるのか調べてみた  

UNIQUE制約を定義すると自動的にインデックスが作成されますが、自分で「CREATE INDEX」した場合と違いはないのか?ちょっと気になったので速度を調べてみることに。
重複しない数字で並びがバラバラなIDを持つレコードを100万件格納したSQLiteデータベース・テーブルを用意し、IDの値が「
ある数値」以下のレコードの個数を80回カウントする。という処理を行い、インデックスの有無による速度の違いを見てみました。
このIDに対してインデックスを作成したりUNIQUE制約を定義したりしています。

それぞれ3回計測した秒数です。

インデックスを作成しない場合
18.138993024826 秒
18.131224870682 秒
18.120187997818 秒

UNIQUE制約を定義した場合
0.41776490211487 秒
0.41247010231018 秒
0.41232419013977 秒

UNIQUE制約を定義せずCREATEでインデックスを作成した場合
0.39896488189697 秒
0.39444804191589 秒
0.39361310005188 秒

UNIQUE制約を定義しCREATEでインデックスも作成した場合
0.39404106140137 秒
0.38978981971741 秒
0.38979911804199 秒

インデックスを作成しないテーブルの遅さに驚きと納得がある一方、興味深いのはUNIQUE制約を定義した場合と、UNIQUE制約を定義せずCREATEでインデックスを作成した場合の速度の差です。
ごくわずかですがCREATEで作成した方が速い結果となってます。

誤差かな?と思って両者を数回実行したのですが、上記秒数とほぼ同じ結果となります。誤差ではなくCREATE INDEXの方がどうも速そうです。

UNIQUE制約で作成されるインデックスと「CREATE INDEX」で作成されるインデックスとは何か違うようですね。

といっても差はほぼないので「UNIQUE」制約を定義した項目にわざわざインデックスを作成する必要はなさそうです。

なお、最後のUNIQUE制約を定義してインデックスも作成した場合の秒数は、インデックスだけを作成した場合の秒数より速く見えますがこれは「誤差」です。同じ結果と思ってください。
関連記事

category: データベース

この記事へのコメント

コメントの投稿

非公開コメント

コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop