如果可能,优化简单的SQLite查询!

时间:2011-05-11 20:53:17

标签: sql sqlite query-optimization

我想使用SQLite 3优化此查询。

SELECT id FROM Table WHERE value = (SELECT max(value) FROM Table WHERE value < myvalue )
   UNION 
SELECT id FROM Table WHERE value = (SELECT min(value) FROM Table WHERE value > myvalue );

我想要一个给定值的2个最接近的id。示例:id 20,值50.最接近的id可以是3,值为48(最大值较低),高于id 4,值为55(最小值较高)。

SQLite 3没有真正数据库的所有功能,如果你有更好的东西我可以使用,非常感谢!

3 个答案:

答案 0 :(得分:0)

这是另一种方法。我不知道它在sqlite中是否更快。你可以随时尝试。

select id
from table
where value - myvalue > 0
order by abs(value - myvalue) asc
limit 1
union all
select id
from table
where value - myvalue < 0
order by abs(value - myvalue) desc
limit 1

答案 1 :(得分:0)

SELECT
 (SELECT id FROM test WHERE value < myvalue ORDER BY value DESC LIMIT 1) as below,
 (SELECT id FROM test WHERE value > myvalue ORDER BY value ASC  LIMIT 1) as above;

从理论上讲,这应该更快,因为它使用两个四次扫描。 无论如何,我会创建一个包含几个millon记录的表,并测试不同的查询 计时器开启。 (.smer在sqlite控制台中。)

还要确保使用和不使用索引进行测试。有时,特别 当索引大小超过你的内存时,索引就没用了。

如果速度是真正的问题,请考虑替代光存储,如京都 柜。

答案 2 :(得分:0)

SELECT id FROM Table WHERE value > myvalue ORDER BY value LIMIT 1
SELECT id FROM Table WHERE value < myvalue ORDER BY value DESC LIMIT 1

此解决方案没有子选择,表扫描和没有无关的组或数学函数。 但需要两个查询

你应该索引Table.value