MySql索引基础指南

索引概述

所有MYSQL列类型都能被索引,对相关列使用索引是提高SELECT操作性能的最佳途径

索引类型

1.主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。
2.唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。
3.普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
4.全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
5.覆盖索引:查询列要被创建的索引覆盖,不必读取数据行。
6.组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并。
等

一、创建索引

普通索引

create index index_name on table(column(length));
alter table table_name add index index_name(column(length));

唯一索引

create index index_name on table(column(length));
alter table table_name add index index_name(column(length));

全文索引

create fulltext index index_name on table(column(length));
alter table table_name add fulltext index_name(column);

组合索引

alter table table_name add index index_name_(title(50),time(10),......);

二、查看索引

show index from table_name

三、删除索引

DROP INDEX deptname_index on dept

四、设计索引原则

1.要在条件列上创建索引

就是在where子句中的列上

2.尽量使用唯一索引

当为性别,只有两种值得情况下,唯一索引就没有使用必要,因为,都能得到大约一半得值

3.使用短索引

对字符串索引,应该指定一个前缀长度,当有char(200)的列时,当前10~20个字符就能区分出来时就只需要选择前10-20个字符

4.利用最左前缀

要运用组合索引时,必须从遵循最左原则(就是最左边的列必须出现在where后的第一个)

在创建一个n列的索引,实际相当于创建了MySQL可利用的n个索引。
多列索引可以起到几个索引的作用,因为可以利用最左边的列集来匹配行。这样的列集称为最左前缀。列入以a,b,c的顺序创建一个组合索引之后,利用a = ?或者a = ?and b= ?或者a = ?and b = ?and c = ?这三种条件查询,能有效提高效率。

5.对于InnoDB存储引擎的表,尽量手工指定主键。

默认主键顺序保存,没有主键,有唯一索引,按唯一索引顺序保存。都没有表自动生成一个内部列,按这个顺序来。当表有多个唯一,且都可以为主键,要选择常用,且短的。

五、索引设计的误区

1.不是所有表都需要创建索引

通常来说,常见的代码表、配置表等数据量很小的表。除了主键外,没有创建索引的必要。而大表的CRUD尽可能通过索引,如果通过全表扫描,极其浪费性能。

2.不要过度使用索引

索引都要额外占用磁盘空间,并降低写操作。在修改表的内容,索引必须进行更新。

3.谨慎创建低选择度索引

对于选择性低,且分布不均的列,过滤的结果集大,效果不好。例如性别只有两个选择。

六、索引设计的一般步骤

通过上面介绍,对于大表的设计步骤如下

1.整理表上所有sql,重点包括selectupdatedelete操作的where条件所用到的列的组合,
关联查询的关联条件
2.整理所有sql的预期执行频率
3.整理所有涉及列的选择度,选择度越高越好,比如主键列选择度最高。
4.给表选择合适的主键
5.有限给执行频率最高的SQL创建索引,
6.按执行频率排序,依次检查是否需要为每个SQL创建索引
7.索引合并,利用复合索引降低索引的总数,充分利用最左原则。
posted @ 2022-05-07 21:43  有诗亦有远方  阅读(13)  评论(0)    收藏  举报  来源