在iPad上SQLite慢查询

时间:2012-07-27 18:42:51

标签: ios sqlite xamarin.ios

我有一张包含近300K记录的表格。我在索引列('type'被索引)上运行一个带有where子句的简单select语句:

SELECT *
FROM Asset_Spec
WHERE type = 'County'

该查询很快 - 大约1秒钟。另外,我想测试状态:

SELECT *
FROM Asset_Spec
WHERE type = 'County'
AND status = 'Active'

第二个非常慢(分钟)。状态未编入索引,在此特定情况下,数据库中99.9%的值为“活动”。

我有什么想法可以获得更好的表现?我们正在编译我们自己的SQLite版本,因此我可以调整许多设置(仅供参考 - 在iOS预装SQLite上的相同性能)

3 个答案:

答案 0 :(得分:2)

我查看了查询计划,行数估计数量惊人。 Asset_Spec(~2行) - 实际行数几乎是300,000。 Ran'ALSIYZE' - 现在相同的查询在16ms内运行。

答案 1 :(得分:1)

我要尝试的第一件事是使用子查询

SELECT * FROM
(SELECT *
FROM Asset_Spec
WHERE type = 'County')
WHERE status = 'Active'

正如罗伯特建议的那样,在要过滤的任何列上添加索引是个好主意。我还会考虑将字段类型和状态更改为字符串以外的其他内容。

答案 2 :(得分:0)

您需要选择*?

的任何原因

建议:

您需要检索多条记录吗?如果您只需要找到第一条记录,则在查询结尾添加“limit 1”。

如果您只是检查行是否存在,即您只需要知道有一行状态为活动,则“选择1”而不是“选择*”。