【SQL】索引 - 增删查改

Posted by 西维蜀黍 on 2023-02-20, Last Modified on 2023-09-20

索引(Index)

索引(Index)是一种特殊的查找表,作用是给数据库搜索引擎用来加快数据检索。

简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书后边的索引是非常相似的。例如,如果你想在一本讨论某个话题的书中引用所有页面,则首先需要指向索引,索引按字母顺序列出了所有主题,然后指向一个或多个特定的页码。

索引有助于加快 SELECT 查询,但它会减慢使用 UPDATEINSERT 语句时的数据输入。

索引可以创建或删除,但不会影响数据。使用CREATE INDEX语句创建索引,它允许命名索引,指定表及要索引的一列或多列,并指示索引是升序排列还是降序排列。索引也可以是唯一的,与 UNIQUE 约束类似,在列上或列组合上防止重复条目。

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 子句中有两个或多个列经常使用,则选择使用组合索引。

隐式索引

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

如:

CREATE INDEX money_index ON teamTable (money);

// 查看索引:
.indices teamTable

// 结果:
salary_index
sqlite_autoindex_COMPANY_1  //创建表时创建的隐式索引

// 列出数据库范围的所有索引:
SELECT * FROM sqlite_master WHERE type = 'index';

Reference