Personal tools
You are here: Home ブログ 井上 sqliteのLIKE演算でインデックスを使う方法
« September 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
Recent comments
Re:Javaの面白いバグ 徐です 2010-08-30
Re:Javaの面白いバグ inoue 2010-08-23
Re:Javaの面白いバグ 徐です 2010-08-18
Re:WebSocketのプロトコル inoue 2010-08-12
Re:WebSocketのプロトコル naruse 2010-08-11
Re:blogのコメントスパムが多すぎる inoue 2010-07-22
Re:マルチスケジューラv5.1.4をリリース - inspired by salesforceのchatter - inoue 2010-06-09
Re:マルチスケジューラv5.1.4をリリース - inspired by salesforceのchatter - hamabe 2010-06-08
Re:雑誌連載「Emacsのトラノマキ」の原稿(part4)公開 tune 2010-05-27
Re:雑誌連載「Emacsのトラノマキ」の原稿(part4)公開 tune 2010-05-27
Re:Emacs23.2が更に1ビット稼いだ秘密 inoue 2010-05-14
Re:Emacs23.2が更に1ビット稼いだ秘密 ef 2010-05-13
Categories
カテゴリなし
 
Document Actions

sqliteのLIKE演算でインデックスを使う方法

sqliteで、次の条件を満たしたselectでインデックスが使われていませんでした(explainで確認)。

  • インデックスを張ったカラム
  • LIKE '/foo/bar/%'のように%が最後

次のページにsqliteがLIKE演算子に対しインデックスを使う条件が書いてありました。

sqliteのデフォルトは、case-sensitiveがOFFです。つまり、文字列比較の時、大文字小文字を区別しません("abc"と"ABC"が等価になります)。多くの局面で、不当なデフォルト設定だと思いますが、SQL標準がそう要求しているようです。

case-sensitive=OFFの時、sqliteは上記のようなLIKE演算に対して、インデックスを使ってくれません。AirOneで使うsqliteは、コンパイル時に'-DSQLITE_CASE_SENSITIVE_LIKE'を渡して、case-sensitive=ONにしました。explainで確認して、インデックスが使われることを確認しました。そもそもLIKE演算はあまり使っていないので、影響は微々たるものです。

SQL標準がcase-insensitiveを要求しているとすると、他のRDBMSでも、デフォルトはcase-insensitiveで文字列比較をしているのかもしれません。これだけでインデックスを使ってくれないsqliteは極端な例で、他のメジャーなRDBMSでそういうことは無いと思います。しかし、僅かとは言え、case-insensitiveな比較がcase-sensitiveな比較より重いのは、どんなシステムでも変わりません。case-insensitiveにする理由が無い場合、明示的にcase-sensitiveにする方が良いと思います。

Oracleに比べると、sqliteは実に単純です。素直で分かりやすい反応を返します(バカとも言う)。年寄り扱いされそうですが、この反応の素直さが好きです。いざとなればソースを見ることもできます。素晴らしい。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/sqlite306elike6f147b9730a430f330c330af30b930924f7f304665b96cd5/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.