Small. Fast. Reliable.
Choose any three.
创建索引

1.语法

create-index-stmt:

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

expr:

索引栏:

CREATE INDEX命令由关键字“ CREATE INDEX”,新索引的名称,关键字“ ON”,先前要创建索引的表的名称以及带括号的表列名称和/组成的列表组成或用于索引键的表达式。如果包含可选的WHERE子句,则索引为“部分索引”。

如果存在可选的IF NOT EXISTS子句,并且已经存在另一个具有相同名称的索引,则此命令将成为no-op。

可以附加到单个表的索引数没有任意限制。索引中的列数限制为sqlite3_limitSQLITE_LIMIT_COLUMN,...)设置的值 。

使用DROP INDEX命令删除索引

1.1。唯一索引

如果UNIQUE关键字出现在CREATE和INDEX之间,则不允许重复的索引条目。任何试图插入重复条目的尝试都会导致错误。

为了唯一索引的目的,所有NULL值都被认为与所有其他NULL值不同,因此是唯一的。这是对SQL-92标准的两种可能的解释之一(标准中的语言是模棱两可的)。SQLite使用的解释是相同的,PostgreSQL,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编译可用于更改设置的SQLite的任何版本的具体行为。

1.4。NULLS FIRST和NULLS LAST

索引不支持NULLS FIRST和NULLS LAST谓词。为了进行排序,SQLite认为NULL值小于所有其他值。因此,NULL值始终出现在ASC索引的开头和DESC索引的结尾。

1.5。归类

可选的在每个列名称或表达式之后的COLLATE子句定义用于该列中文本输入的整理顺序。默认的整理顺序是在CREATE TABLE语句中为该列定义的整理顺序 。或者,如果没有另外定义整理顺序,则使用内置的BINARY整理顺序。