📓
SQLite3
  • SQLite3
  • 创建数据库
  • 附加数据库
  • 分离数据库
  • SQLite 创建表
  • SQLite 删除表
  • Insert 语句
  • Select 语句
  • Where 子句
  • Untitled
  • Update 语句
  • Delete 语句
  • Like 子句
  • Glob 子句
  • Limit 子句
  • Order By
  • Group By
  • Having 子句
  • Distinct 关键字
  • SQLite 约束
  • SQLite Joins
  • Unions 子句
  • 触发器(Trigger)
  • 索引(Index)
  • Alter 命令
  • SQLite 事务(Transaction)
  • SQLite 常用函数
Powered by GitBook
On this page

Was this helpful?

索引(Index)

索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与查字典的原理是非常相似的。

索引有助于加快 SELECT 查询和 WHERE 子句,但它会减慢使用 UPDATE 和 INSERT 语句时的数据输入。索引可以创建或删除,但不会影响数据。

使用 CREATE INDEX 语句创建索引,它允许命名索引,指定表及要索引的一列或多列,并指示索引是升序排列还是降序排列。

CREATE INDEX 命令

CREATE INDEX 的基本语法如下:

CREATE INDEX index_name ON table_name;

单列索引

单列索引是一个只基于表的一个列上创建的索引。基本语法如下:

CREATE INDEX index_name
ON table_name (column_name);

唯一索引

使用唯一索引不仅是为了性能,同时也为了数据的完整性。唯一索引不允许任何重复的值插入到表中。基本语法如下:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

组合索引

组合索引是基于一个表的两个或多个列上创建的索引。基本语法如下:

CREATE INDEX index_name
on table_name (column1, column2);

创建一个单列索引还是组合索引,要考虑到作为查询过滤条件的 WHERE子句是否使用得非常频繁。

如果只对一个列使用,则选择使用单列索引。如果在作为过滤的 WHERE子句中对两个或多个列经常使用,则选择使用组合索引。

隐式索引

隐式索引是在创建对象时,由数据库服务器自动创建的索引。索引自动创建为主键约束和唯一约束。

实例

下面是一个例子,我们将在 COMPANY 表的 salary 列上创建一个索引:

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

现在,让我们使用 .indices 命令列出 COMPANY 表上所有可用的索引,如下所示:

sqlite> .indices COMPANY

这将产生如下结果,其中 sqlite_autoindex_COMPANY_1 是创建表时创建的隐式索引。

salary_index
sqlite_autoindex_COMPANY_1

DROP INDEX 命令

一个索引可以使用 SQLite 的 DROP 命令删除。

基本语法如下:

DROP INDEX index_name;

您可以使用下面的语句来删除之前创建的索引:

sqlite> DROP INDEX salary_index;

Indexed By 子句

Indexed By 子句指定使用哪一个 index 来对表进行操作。其参数为一个已命名的索引。

语法

下面是 INDEXED BY 子句的语法,它可以与 DELETE、UPDATE 或 SELECT 语句一起使用:

SELECT|DELETE|UPDATE column1, column2...
FROM table_name
INDEXED BY (index_name)
WHERE (CONDITION);

实例

假设有表 COMPANY,我们将创建一个索引,并用它进行 INDEXED BY 操作。

sqlite> CREATE INDEX salary_index ON COMPANY(salary);
sqlite>

现在使用 INDEXED BY 子句从表 COMPANY 中选择数据,如下所示:

sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;
Previous触发器(Trigger)NextAlter 命令

Last updated 3 years ago

Was this helpful?