位置:首页 > > SQLite 索引

SQLite 索引

索引是一种特殊的查找表,可以使用搜索引擎的数据库,以加快数据检索。简单地说,索引是一个指针,表中的数据。一个数据库中的索引是非常相似在一本书的背部的索引。

例如,如果你想在一本书中引用的所有页面讨论某个话题,先参考索引,按字母顺序列出所有主题,再交由一个或多个特定的页码。

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

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

索引也可以是唯一的,类似UNIQUE约束,在列上有一个索引的列或组合索引防止重复条目。

CREATE INDEX命令:

CREATE INDEX的基本语法如下:

CREATE INDEX index_name ON table_name;

单列索引:

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

CREATE INDEX index_name
ON table_name (column_name);

唯一索引:

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

CREATE INDEX index_name
on table_name (column_name);

复合索引:

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

CREATE INDEX index_name
on table_name (column1, column2);

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

应该有一列,单列索引应该是选择。如果有两个或多个列中经常使用的WHERE子句作为过滤器,组合索引将是最好的选择。

隐式索引:

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

例子

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

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

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

sqlite> .indices COMPANY

这将产生以下结果,其中sqlite_autoindex_COMPANY_1是创建表本身时创建了一个隐式索引。

salary_index
sqlite_autoindex_COMPANY_1

可以列出所有的索引数据库范围如下:

sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

DROP INDEX命令:

一个索引可以使用SQLite DROP命令删除。应注意当删除索引,因为性能可能会减缓或改善。

基本语法如下:

DROP INDEX index_name;

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

sqlite> DROP INDEX salary_index;

索引什么情况避免使用?

虽然索引的目的在于提高数据库的性能,有时间时,应避免。使用索引时,应重新考虑下列准则:

  • 索引不应该使用较小的表上。

  • 有频繁的,大批量的更新或插入操作的表。

  • 索引不应使用含有大量的NULL值的列。

  • 频繁操作的列都将不会被索引。