2017-08-23 77 views
1

我使用一個sqlite3的數據庫,我有一個表,看起來像這樣:sqlite3的裂棗在創建索引

sqlite3 displaying table

數據庫是相當大,運行查詢是很慢的。我試圖通過索引一些列來加速這個過程。我想索引的一列是QUOTE_DATETIME列。

問題:我想指數按日期(YYYY-MM-DD)只,而不是按日期和時間(YYYY-MM-DD HH:MM:SS),這是我目前在QUOTE_DATETIME數據。如何使用CREATE INDEX創建僅使用格式爲YYYY-MM-DD的日期的索引?我應該將QUOTE_DATETIME分成2列:QUOTE_DATEQUOTE_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 datadate(QUOTE_DATETIME)應該將日期+時間轉換爲日期,而INSERT INTO應將新值添加到QUOTE_DATE。但是,它不起作用,我不知道爲什麼。新列最終沒有添加任何內容。

回答

1
  1. 表達指標不得使用可能基於函數調用本身沒有提到的數據更改它們的返回值的功能。 date()函數是這樣一個函數,因爲它可能使用當前時區設置。

    但是,在SQLite 3.20或更高版本中,只要沒有使用任何時區修飾符,就可以在索引中使用date()

  2. INSERT添加新行。要修改現有行,使用UPDATE

    UPDATE Data SET Quote_Date = date(Quote_DateTime); 
    
+0

1.感謝您的解釋。無論如何,這可能不是一個好的解決方案。 2.對我而言,謝謝你解釋爲什麼INSERT不起作用! –