索引

索引优缺点

优点: ①通过使用唯一性索引,保证数据库某字段唯一。

②加快数据检索速度,减少数据查询时间,有分组和排序是,减少分组和排序的时间。

③加速表与表之间的连接。

缺点:①索引占用额外的物理空间。

②当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

③创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

索引实现方式


创建索引原则

①查询使用频率高的字段创建索引。排序、分组、联合查询频率高的字段创建索引。

②索引不宜过多,选择合适的字段创建索引。例如①。

③需要多个列设置索引时,可以采用联合索引,创建联合索引时需要注意,只有在第一列的字段使用时,索引才会生效。

例:index index_name (A, B, C, D); 在sql语句中使用到A时,索引才会生效。

④尽量使用数据量少的索引,对于一个varchar(500)进行全文检索使用的时间比varchar(20)花费的时间长。

⑤频繁更新的字段尽量不使用索引。

索引失效

①like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效

②当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效

③在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的

④对索引字段进行计算操作、字段上使用函数

⑤违背最左匹配原则:对于多列索引(复合索引),条件中没有索引的第一个字段,则不会使用索引

查看sql执行计划

使用explain检测索引是否被启用,在执行结果中查看key这一列的值,如果为NULL,说明没有使用索引

explain select * from table where column = '';

联合索引的原理 联合索引优缺点_数据库


id:选择标识符

select_type:表示查询的类型(SIMPLE、UNION等)

table:输出结果集的表

partitions:匹配的分区

type:表示表的连接类型

possible_keys:表示查询时,可能使用的索引

key:表示实际使用的索引,key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中

key_len:索引字段的长度

ref:列与索引的比较

rows:扫描出的行数(估算的行数)

filtered:按表条件过滤的行百分比

len:索引字段的长度

ref:列与索引的比较

rows:扫描出的行数(估算的行数)

filtered:按表条件过滤的行百分比

Extra:执行情况的描述和说明,有三个值:

using index代表使用覆盖索引,不用回表using where代表数据库引擎返回结果后mysql server还会再次筛选。(引擎就是innodb这种,要注意区分引擎和mysql server的区别。)using condition index代表使用二级索引不够还要回表,但回表之前会过滤此二级索引能过滤的where条件