《深入浅出MySQL》读书笔记四:索引的设计和使用

一、概述

所有的MySQL列类型都可以被索引,对相关列使用索引是提高SELECT性能的最佳途径。

根据存储引擎的不同,表的最大索引数和最大索引长度有所不同,每种存储引擎对每个表至少支持16个索引,总索引长度至少为 256字节。

MyISAM和InnoDB 使用  BTREE索引, MEMORY 支持 HASH索引和 BTREE索引。

二、基础知识

常见的索引类型: 主键、普通索引、唯一索引、全文索引。

create index ind_name1 on test11(name1);  为表test11 的 name1列 创建名为 ind_name1的普通索引
show index from test11; 查看 test11表中创建的索引
drop index ind_name1 on test11; 将 test11表中的 名为ind_name1的索引删除

 一般为 select 语句的  where 条件涉及的列 创建索引

explain select * from test11 where name1 like '更%'; 使用 explain来查看MySQL的执行计划
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test11
   partitions: NULL
         type: index
possible_keys: ind_name1    -->可能使用的索引
          key: ind_name1    -->实际使用的索引
      key_len: 63
          ref: NULL
         rows: 1            -->扫描的行数
     filtered: 100.00
        Extra: Using where; Using index
1 row in set, 1 warning (0.00 sec)

三、设计索引的一些原则

1、为 where语句中的条件列 创建索引

2、根据列值的特性,创建唯一索引

3、部分(前缀)索引:对于 字符数较多的列,比如 CHAR(200), 如果 前缀的字符有较高的区分度,则可以 create index ind_ on table(column(20)),为 前20个字符创建 前缀索引。  优点:节省索引空间;较短的索引磁盘IO较少,查询速度更快,比较值也更快;索引缓存中可以容纳更多的值。

4、只保持所需的索引,不要创建过多的索引。

5、InnoDB存储引擎的表,记录默认会按照一定的顺序保存:如果有明确定义的主键,则按照主键顺序保存;没有主键,但有唯一索引,则按照唯一索引的顺序保存;既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照内部列的顺序保存。

所以,InnoDB表 建表时 需要指定主键,按照主键进行的访问是 最快的。 InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择  较短的  数据类型,可以有效减少磁盘占用,提高缓存效果。

四、BTREE索引和 HASH索引

HASH索引的特征:只能用于使用 = 或 <=> 操作符的等式比较;优化器不能使用 HASH索引加速order by操作;MySQL不能确定在两个值之间大约有多少行,会影响查询效率。总的来说,就是 使用索引的条件比较严格。

BTREE索引:当使用 >、<、<=、>=、BETWEEN、!=、<>、LIKE 'pattern%',都可以使用相关列上的索引。

猜你喜欢

转载自blog.csdn.net/weixin_37882382/article/details/83141177