我有一张(start_date, end_date, description)
表 - 为了找到在给定时期内发生的事件,我正在做
SELECT *
FROM table
WHERE start_date < $view_end AND end_date > $view_start
这可以正常工作,并且许多数据库产品都能够在两列上使用索引来有效地查找结果 - 但SQLite一次只支持使用一个范围索引(我可以进行大量的索引等于比较,但是只有一个索引大于或小于)。因此,如果我想在一百万个表中查看中间10个事件,我只能使用一个索引来消除其中的一半,并且必须对其他500,000个进行全表扫描。
考虑到SQLite的限制,我是否可以采用高效的方式重写此查询?
答案 0 :(得分:0)
这不会像你可以使用两个索引一样快,但会比在第二列上使用表扫描快得多:
SELECT *
FROM table
WHERE start_date BETWEEN $view_start AND $view_end AND end_date > $view_start
它会将您的表格扫描向下扫描到您正在寻找的数据范围之间开始的记录(而不是在结束日期之前开始的所有记录)