小巧、快速、可靠。
任選三項。
建立索引

1. 語法

create-index-stmt

CREATE UNIQUE INDEX IF NOT EXISTS schema-name . index-name ON table-name ( indexed-column ) , WHERE expr

expr

indexed-column

CREATE INDEX 指令包含關鍵字「CREATE INDEX」,後接新索引的名稱、關鍵字「ON」、要建立索引的先前建立資料表的名稱,以及用於索引鍵的資料表欄位名稱和/或運算式的括號清單。如果包含 WHERE 子句,則索引為「部分索引」。

如果存在 IF NOT EXISTS 子句,且已存在具有相同名稱的另一個索引,則此指令會變成無作用。

附加到單一資料表的索引數量沒有任意限制。索引中的欄位數量限制為 sqlite3_limit(SQLITE_LIMIT_COLUMN,...) 設定的值。

使用 DROP INDEX 指令移除索引。

1.1. 唯一索引

如果 CREATE 和 INDEX 之間出現 UNIQUE 關鍵字,則不允許重複索引項目。嘗試插入重複項目會導致錯誤。

針對唯一索引的目的,所有 NULL 值都視為不同於其他所有 NULL 值,因此是唯一的。這是 SQL-92 標準的兩種可能詮釋之一(標準中的語言含糊不清)。SQLite 使用的詮釋相同,而 PostgreSQL、MySQL、Firebird 和 Oracle 也遵循此詮釋。Informix 和 Microsoft SQL Server 則遵循標準的另一種詮釋,即所有 NULL 值都相等。

1.2. 表達式索引

索引中的表達式不得參照其他表格,也不得使用子查詢或其結果可能變更的函數(例如:random()sqlite_version())。索引中的表達式只能參照正在索引的表格中的欄位。表達式索引不適用於 版本 3.9.0(2015-10-14)之前的 SQLite 版本。請參閱 表達式索引 文件,以取得有關在 CREATE INDEX 陳述式中使用一般表達式的其他資訊。

1.3. 遞減索引

每個欄位名稱或表達式後面都可以加上「ASC」或「DESC」關鍵字之一,以表示排序順序。排序順序可能會被忽略,也可能不會被忽略,這取決於資料庫檔案格式,特別是 架構格式編號。「舊版」架構格式 (1) 會忽略索引排序順序。遞減索引架構格式 (4) 會考量索引排序順序。只有 SQLite 3.3.0(2006-01-11)和後續版本才能理解遞減索引格式。為了相容性,3.3.0 到 3.7.9 之間的 SQLite 版本預設使用舊版架構格式。較新的架構格式在 3.7.10(2012-01-16)和後續版本中預設使用。legacy_file_format pragma 可用於變更任何 SQLite 版本的特定行為。

1.4. NULLS FIRST 和 NULLS LAST

NULLS FIRST 和 NULLS LAST 謂詞不支援索引。對於排序目的,SQLite 視 NULL 值小於所有其他值。因此,NULL 值總是出現在 ASC 索引的開頭和 DESC 索引的結尾。

1.5. 校對

每個欄位名稱或表達式後面的 COLLATE 子句(可選)定義用於該欄位中文字條目的校對順序。預設的校對順序是 CREATE TABLE 陳述式中為該欄位定義的校對順序。或者,如果沒有定義其他校對順序,則使用內建的 BINARY 校對順序。