我的SQLite数据库将位置数据存储为latitude
和longitude
值。我将经常使用以下查询来查询数据库:
SELECT * FROM locations WHERE latitude > 22.2 && latitude < 22.3 && longitude > 50.7 && longitude < 50.8
latitude
上的多列索引以及longitude
是否有助于加快查询速度? This answer提供了使用多列索引执行查询的方式,但随附的注释提到它在SQLite中不起作用。
答案 0 :(得分:0)
基于this SO answer只需在纬度列上添加索引就可以以有意义的方式帮助查询。假设您可以提供足够窄的纬度范围,SQLite只需要按经度扫描相对较少数量的记录。
答案 1 :(得分:0)
咨询docs。我相信多列索引仍然有用。
使用的最右列可能会使用不等式。
假设您的索引已打开(lat,long)。然后lat将被“使用”而long将不会被“使用”。这完全取决于“使用”的含义。
我的猜测是“使用”索引意味着应用受益于索引排序顺序的访问策略。这样的策略是通过依赖于订单的搜索来寻找第一个匹配的行,并连续读取到最后一个匹配的行。
我强烈怀疑,在使用lat之后,将扫描索引中的行并比较它们的长值。通过在索引中进行过滤,将避免代价高昂的表查找。只有匹配的行才会有表查找。
如果索引仅为(lat),则每个符合条件的lat行都将进行表查找。
与查询优化一样,检查执行计划并测量IO。