我有一个非常简单的数据库结构。我在一个表中有 12 列,大多数是 varchar(<50),大约有 8500 行。
当我在 iPhone 4 上执行以下查询时,平均需要 2.5-3 秒才能得到结果:
SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20
似乎这种事情不应该这么慢。有趣的是,在第 2 代 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 db 上添加了一个索引:CREATE INDEX names_idx ON names (name, origin, sex, meaning)
where name
, origin
、sex
和 meaning
是我倾向于使用 WHERE
和 LIKE
运算符查询的列。
对提高这些搜索的性能有什么想法吗?或者这是否是原子性的?
索引 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名称(名称)
。从理论上讲,这应该会加快查询速度。
如果您想要其他索引与其他常见查询的组合列,这很公平,它可能会提高查询速度,但请记住它会增加您的数据库大小。
关于ios - 如何为 iOS 加速或优化这个 SQLite 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119835/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |