我正在使用SQLite3数据库,我有一个如下所示的表:
数据库非常大,运行查询非常慢。我试图通过索引一些列来加速这个过程。我要编制索引的其中一列是QUOTE_DATETIME
列。
问题:我想仅按日期(YYYY-MM-DD)进行索引,而不是按日期和时间(YYYY-MM-DD HH:MM:SS)进行索引,这是数据I目前有QUOTE_DATETIME
。
问题:如何使用CREATE INDEX
创建仅使用YYYY-MM-DD格式的日期的索引?我应该将QUOTE_DATETIME
分成两列:QUOTE_DATE
和QUOTE_TIME
吗?如果是这样,我该怎么做?有更简单的解决方案吗?
感谢您的帮助! :d
尝试1:我尝试运行CREATE INDEX id ON DATA (date(QUOTE_DATETIME))
,但收到错误Error: non-deterministic functions prohibited in index expressions
。
尝试2:我运行了ALTER TABLE data ADD COLUMN QUOTE_DATE TEXT
来创建一个新列,仅保留日期。然后INSERT INTO data(QUOTE_DATE) SELECT date(QUOTE_DATETIME) FROM data
。 date(QUOTE_DATETIME)
应将日期+时间转换为仅日期,INSERT INTO
应将新值添加到QUOTE_DATE
。但是,它不起作用,我不知道为什么。新专栏最终没有添加任何内容。
答案 0 :(得分:1)
表达式索引不得使用可能根据函数调用本身未提及的数据更改其返回值的函数。 date()
函数就是这样一个函数,因为它可能使用当前时区设置。
但是,在SQLite 3.20或更高版本中,只要您没有使用任何时区修饰符,就可以在索引中使用date()
。
INSERT添加新行。要修改现有行,请使用UPDATE:
UPDATE Data SET Quote_Date = date(Quote_DateTime);