标签搜索

目 录CONTENT

文章目录

数据库索引创建原则、创建与删除示例

沙漠渔
2022-07-28 00:19:22 / 0 评论 / 0 点赞 / 913 阅读 / 2,429 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前段时间遇到设备的数据库记录数很大,导致出现查询、更新异常的情况,于是首先想到的是索引问题,将索引相关创建原则、注意事项、创建方式、删除方式等再整理一下,后面需要使用数据库索引的时候方便回顾。

前言

对一个数据库较大的表创建合适的索引,由此索引的唯一性,可以在很大程度上加快数据检索速度、加快表与表之间的连接、减少查询中分组与排序的事件,从而提高系统性能。但是索引并不是多多益善,因此创建和维护需要耗费时间,而索引也需要占用很大的物理空间,是以空间来换取速度的一种机制,另外更新表时索引也要相应修改。合理的索引能帮助你很大的提高查询效率,但不当的索引也有可能会拖慢查询,尤其是建立复合索引时更要谨慎。

一、索引创建原则

  1. 表的主键、外键必须有索引;
  2. 数据量超过300的表应该有索引;
  3. 经常与其他表进行连接的表,在连接字段上应该建立索引;
  4. 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
  5. 索引应该建在选择性高的字段上;
  6. 索引应该建在小字段上,对于大的文本字段甚至超长字段(例如数据类型为textntext的字段),不要建索引;
  7. 频繁进行数据操作的表,不要建立太多的索引;
  8. 删除无用的索引,避免对执行计划造成负面影响;

二、复合索引注意事项

  1. 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替;
  2. 正确选择复合索引中的主列字段,一般是选择性较好的字段;
  3. 复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
  4. 如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
  5. 如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
  6. 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

三、索引创建

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEXALTER TABLE来为表增加索引。

1. ALTER TABLE

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。

2. CREATE INDEX

CREATE INDEX可对表增加普通索引或UNIQUE索引。

CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_nameindex_namecolumn_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

3. 索引类型

在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEYUNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。
PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARYUNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。 下面的SQL语句对Student表在SID上添加PRIMARY KEY索引。

ALTER TABLE StudentADD PRIMARY KEY (SID)

四、索引删除

可利用ALTER TABLEDROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

其中,前两条语句是等价的,删除掉table_name中的索引index_name
第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则SQL将删除第一个UNIQUE索引。
如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

0
广告 广告

评论区