sql索引

1 什么是索引

什么是索引(Index)。数据库中的索引,就好⽐⼀本书的目录,它可以帮我们快速进行特定 值的定位与查找,从而加快数据查询的效率。

2 索引的类型

  • 主键索引
  • 非空索引
  • 唯一索引
  • 全文索引
  • 普通索引

唯一索引:在创建唯一索引时要不能给具有相同的索引值。在⼀张数据表⾥可以有多个唯⼀索引。
主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。⼀张表⾥最多只有⼀个主键索引。
聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。

3 索引的好处

提高数据的搜索速度
加快表与表之间的连接速度
在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

4 索引的坏处

在我们建立数据库的时候,需要花费的时间去建立和维护索引,而且随着数据量的增加,需要维护它的时间也会增加。
在创建索引的时候会占用存储空间。
在我们需要修改表中的数据时,索引还需要进行动态的维护,所以对数据库的维护带来了一定的麻烦。

5 什么时候需要索引?什么时候又不需要索引?

5-1 需要索引

1.主键自动建立唯一索引
2.频繁作为查询条件的字段应该创建索引
3.查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找
4.查询中统计或者分组的字段;
5.一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。

5-2 什么时候不需要?

  1. 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件
  2. where条件里用不到的字段,不创建索引;
  3. 表记录太少,不需要创建索引;
  4. 经常增删改的表;
    5.数据重复且分布平均的字段;些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引。

6 索引的操作

6-1 创建

创建普通索引
--CREATE INDEX index_name ON table_name(col_name);

--创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name(col_name);

--创建普通组合索引
CREATE INDEX index_name ON table_name(col_name_1,col_name_2);

--创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

通过修改表结构来创建
ALTER TABLE table_name ADD INDEX index_name(col_name);

创建表时候直接创建
CREATE TABLE table_name (
ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,
INDEX index_name (col_name)
);

6-2 索引的删除

--直接删除索引
DROP INDEX index_name ON table_name;

--修改表结构删除索引
ALTER TABLE table_name DROP INDEX index_name;

7 相关sql命令

查看表结构
desc 表名字

查看表创建的sql
show create table table_name;

查看索引
show index from  table_name;

8 其它注意事项

 避免使用select *- count(1)或count(列) 代替 count(*)

- 创建表时尽量时 char 代替 varchar

- 表的字段顺序固定长度的字段优先

- 组合索引代替多个单列索引(经常使用多个条件查询时)

- 尽量使用短索引

- 使用连接(JOIN)来代替子查询(Sub-Queries)- 连表时注意条件类型需一致- 索引散列值(重复多)不适合建索
我对任何唾手而得,快速,出自本能,即兴,含混的事物没有信心。我相信缓慢,平和,细水长流的力量,踏实,冷静。我不相信缺乏自律精神和不自我建设,不努力,可以得到个人或集体的解放。
原文地址:https://www.cnblogs.com/hellosiyu/p/13684529.html