1
我在SQLLite的三列中設置了唯一索引,並且想知道是否需要其他索引,因爲從以下查詢中檢索結果有時需要將近10秒(數據庫大小僅爲25,000行):SQLLite中除了這個之外,還需要另外一個索引嗎?
SELECT * FROM books
WHERE (Author="Roger Davies" COLLATE NOCASE AND
Title>="My Best Days" COLLATE NOCASE AND
CatID>"rtYY91" COLLATE NOCASE)
OR Author > "Roger Davies" COLLATE NOCASE
ORDER BY Author COLLATE NOCASE ASC,
Title COLLATE NOCASE ASC,
CatID COLLATE NOCASE ASC LIMIT 10
的指標爲: CREATE UNIQUE INDEX ON booksIndex書(CATID,作者,標題)
感謝您的指導。
謝謝CL。因此,只需在每一列上設置一個可能被搜索的索引,對吧?如果我在已有該索引的列上運行CREATE INDEX,SQLLIte會優雅地忽略它嗎?我需要改進索引到用戶的數據庫。另外,我需要保留原始索引,以便三列保持唯一性,但我也可能會爲它們設置單個索引。如果是這樣的話,是否有必要讓COLLATE NOCASE原始的唯一索引,或只是在索引上做到這一點? – Shaun
SQLite不會阻止您創建重複的索引。如果您想防止不區分大小寫的重複項,您需要在原始唯一索引上使用COLLATE NOCASE。 –
可以將COLLATE NOCASE改造爲現有索引,還是最好放棄並重新創建索引?最後一個問題(謝謝CL) - 將索引應用於已填充數據的列時,索引是否包含已存在的內容,或者是否需要告訴SQLLite刷新? – Shaun