我想使用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没有真正数据库的所有功能,如果你有更好的东西我可以使用,非常感谢!
答案 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