当涉及到带有日期范围的 SQLite 查询时,我遇到了一个巨大的性能问题。
在我的应用程序中,我有一个包含数千条站点记录的数据库。这些网站是可访问的,但不是全年。这些站点中的每一个都可以定义最多三个可访问的范围。因此,我创建了一个包含以下列的 SQLite 表:open1、close1、open2、close2、open3和close3(以及其他)
应用程序用户可以输入他们想要访问站点的时间范围,例如 2014.01.01 - 2014.01.07
现在,当我在不限制时间的情况下执行搜索时,它非常快。但是当我使用打开时间作为搜索条件时,在快速模拟器上搜索最多需要 7 秒。我什至不想在真实设备上测试这个:)
打开和关闭列中的条目的类型为DATETIME,如下所示:2014-01-01
我目前的查询如下:
SELECT open1,close1,open2,close2,open3,close3 FROM sites WHERE (
( ( strftime('%Y-%m-%d', '2014-01-01') BETWEEN open1 AND close1 ) AND ( strftime('%Y-%m-%d', '2014-01-07') BETWEEN open1 AND close1 ) )
OR
( ( strftime('%Y-%m-%d', '2014-01-01') BETWEEN open2 AND close2 ) AND ( strftime('%Y-%m-%d', '2014-01-07') BETWEEN open2 AND close2 ) )
OR
( ( strftime('%Y-%m-%d', '2014-01-01') BETWEEN open3 AND close3 ) AND ( strftime('%Y-%m-%d', '2014-01-07') BETWEEN open3 AND close3 ) )
)
有没有简单的方法来提高性能?
注意:我尝试使用长格式的 utc 值进行打开和关闭,但这并不是真正可调试的。
提前感谢您的帮助!