OStack程序员社区-中国程序员成长平台

标题: ios - 如何为 iOS 加速或优化这个 SQLite 查询? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 19:13
标题: ios - 如何为 iOS 加速或优化这个 SQLite 查询?

我有一个非常简单的数据库结构。我在一个表中有 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, originsexmeaning 是我倾向于使用 WHERELIKE 运算符查询的列。

对提高这些搜索的性能有什么想法吗?或者这是否是原子性的?



Best Answer-推荐答案


索引 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