索引也是数据库优化中最常见也是最重要的手段之一。

1、先了解一下索引的类别
B-tree索引:最常见的索引类别,大多数的引擎都支持B树索引
HAHS 索引:只有Memorry 引擎支持,使用的场景比较简单
R-tree 索引(空间索引):这格式MyiSAM 的一种特殊的索引类别。主要用于地理空间数据类型,通常使用较少。
Full-text(全文索引):全文索引也是myisam 的一种特殊Deutsch 索引类别

2、数据库引擎和支持的索引类型关系

索引

MyISAM引擎

Indb引擎

Memorry 引擎

b-tree 索引

支持

支持

支持

HASH索引

不支持

不支持

支持

R-tree 索引

支持

不支持

不支持

memorry索引

支持

不支持

不支持

比较常见用的索引类别是Inodb和hash 索引,hash 索引比较简单,只适用于key-value 查询,hash 就比Inodb 就比B-tree 快速,但是不适用于范围查询比如,>,<、>=等等。

数据库引擎
ISAM :是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数 据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占 用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够 容错。如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把 ISAM 用在关键任 务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL 能够支持 这样的备份应用程序。
注意:使用 ISAM 注意点:必须经常备份所有实时数据。

MyISAM 是 MySQL 的 ISAM 扩展格式(MySQL5.5 之前版本的缺省数据库引擎)数据库 引擎。除了提供 ISAM 里所没有的索引和字段管理的大量功能,MyISAM 还使用一种表格锁 定的机制,来优化多个并发的读写操作,其代价是你需要经常运行 OPTIMIZE TABLE 命令, 来恢复被更新机制所浪费的空间。MyISAM 还有一些有用的扩展,例如用来修复数据库文件 的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具。
MYISAM 强调了快速读取操 作,这可能就是为什么 MySQL 受到了 WEB 开发如此青睐的主要原因:在 WEB 开发中你所 进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和 INTERNET 平台提供商 只允许使用 MYISAM 格式。MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据。 MyISAM 引擎使用注意:必须经常使用 Optimize Table 命令清理空间;必须经常备份所 有实时数据。工具有用来修复数据库文件的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具。不支持事务。数据越多,写操作效率越低。因为要维护数据和索引信息。 (索引列越多,相对效率月底。)
如果使用该数据库引擎,会生成三个文件:
.frm:表结构信息
.MYD:数据文件
.MYI:表的索引信息

InnoDB 数据库引擎都是造就 MySQL 灵活性的技术的直接产品,这项技术就是 MYSQL++ API。在使用 MYSQL 的时候,你所面对的每一个挑战几乎都源于 ISAM 和 MyISAM 数据库引 擎不支持事务处理(transaction process)也不支持外键。尽管要比 ISAM 和 MyISAM 引擎慢 很多,但是 InnoDB 包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。 是现在的 MySQL(5.5 以上版本)常用版本默认引擎 MySQL 官方对 InnoDB 是这样解释的:InnoDB 给 MySQL 提供了具有提交、回滚和崩 溃恢复能力的事务安全(ACID 兼容)存储引擎。InnoDB 锁定在行级并且也在 SELECT 语句提 供一个 Oracle 风格一致的非锁定读,这些特色增加了多用户部署的性能。没有在 InnoDB 中 扩大锁定的需要,因为在 InnoDB 中行级锁定适合非常小的空间。InnoDB 也支持 FOREIGN KEY 强制。在 SQL 查询中,你可以自由地将 InnoDB 类型的表与其它 MySQL 的表的类型混合起来,
甚至在同一个查询中也可以混合。 InnoDB 是为处理巨大数据量时的最大性能设计,它的 CPU 效率可能是任何其它基于 磁盘的关系数据库引擎所不能匹敌的。
InnoDB 存储引擎被完全与 MySQL 服务器整合,InnoDB 存储引擎为在主内存中缓存数据 和索引而维持它自己的缓冲池。InnoDB 存储它的表&索引在一个表空间中,表空间可以包 含数个文件(或原始磁盘分区)。这与 MyISAM 表不同,比如在 MyISAM 表中每个表被存在 分离的文件中。
InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为 2GB 的操作系统上。 在 MySQL5.7 版本中,InnoDB 存储引擎管理的数据文件为两个:分别是 frm,idb 文件。 InnoDB 特点:
1)、支持事务
2)、数据多版本读取(InnoDB+MyISAM+ISAM)
3)、锁定机制的改进
4)、实现外键

3、索引使用的典型场景

  • 最左匹配原则:使用了一个组合索引

4、索引失效的场景

  • 以%开头的like 查询不能利用B-tree索引查询
  • 数据类型出现隐式转化的时候也是不会使用索引,比如当你字段是字符串,使用条件的时候一定要加上引号,不然引号也会失效
  • 组合索引的,不符合最左原则的索引也会失效
  • 使用or 分割的条件失效,or前后是索引,索引就不会失效,如果or 前后有一个不是索引,那么索引就会失效