我有一个非常简单的数据库结构。我在一个表中有12列,大多数是varchar(< 50),大约有8500行。
当我在iPhone 4上执行以下查询时,我的搜索结果平均为2.5-3秒:
SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20
似乎这种事情不应该那么慢。有趣的是,在第二代iPod上运行的同一个应用程序的相同查询速度提高了大约1.5秒。那部分超出了我的范围。
我有其他具有相同问题的查询:
SELECT * FROM names WHERE SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20
和
SELECT * FROM names WHERE name LIKE ?3 AND SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20
等
我在SQLite数据库上添加了一个索引:CREATE INDEX names_idx ON names (name, origin, sex, meaning)
其中name
,origin
,sex
和meaning
是我倾向于查询的列与WHERE
和LIKE
运营商对抗。
有关提高这些搜索性能的任何想法,或者这是否与原型一样?
答案 0 :(得分:3)
如果您的查询包含所有这些列,我相信只会使用索引CREATE INDEX names_idx ON names (name, origin, sex, meaning)
。如果在查询中只使用了一些,则无法使用索引。
继续你的第一个查询:SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20
- 我建议在名称上添加一个索引,只需要自己,即CREATE INDEX names_idx1 ON names (name)
。理论上,这应该可以加快查询速度。
如果你希望其他索引具有组合列用于其他常见查询,那么公平,它可以提高查询速度,但请记住它会增加数据库大小。
答案 1 :(得分:1)
最常用的搜索条件是什么?如果您搜索名称,例如您可以根据名称首字母创建更多表。以“A”开头的名称表等。类型相同。在某些情况下,这会提高您的搜索效果。