2009-07-16 47 views
1

查詢SQLite的查詢優化

SELECT * FROM Table WHERE Path LIKE 'geo-Africa-Egypt-%' 

可以優化爲:

SELECT * FROM Table WHERE Path >= 'geo-Africa-Egypt-' AND Path < 'geo-Africa-Egypt-zzz' 

但如何能完成這件事:

select * from foodDb where Food LIKE '%apples%"; 

這可怎麼優化?

回答

0

它會讓我感到驚訝,如果它更快,但你可以嘗試GLOB而不是LIKE並比較;

SELECT * FROM foodDb WHERE Food GLOB '*apples*'; 
+0

沒有任何更快。仍然導致全表掃描。使用sqlite的EXPLAIN查看查詢計劃,即爲查詢運行的vdbe程序。 – laalto 2009-07-16 18:11:48

1

一個選項是冗餘數據。如果您正在查詢大量在某列中出現的固定字符串集合,請添加另一列,其中包含是否可以在另一列中找到特定字符串的信息。

對於任意但仍可標記的字符串,另一種選擇是創建一個字典表,其中有令牌(例如​​)和對出現令牌的實際表的外鍵引用。

一般來說,sqlite在設計上並不是很擅長全文搜索。