Mysql中的索引

一、MySQL 为什么使用 B+ 树?

与B+ 树相比,平衡二叉树、红黑树在同等数据量下,高度更高,性能更差,而且它们会频
繁执行再平衡过程,来保证树形结构平衡。
与B+ 树相比,跳表在极端情况下会退化为链表,平衡性差,而数据库查询需要一个可预期
的查询时间,并且跳表需要更多的内存
与B+ 树相比,B 树的数据存储在全部节点中,对范围查询不友好;非叶子节点存储了数
据,导致内存中难以放下全部非叶子节点,可能需要磁盘IO;

二、MySQL 对 NULL 值的索引支持特点如下:

索引会存储并支持 NULL 值
查询条件 IS NULL 和 IS NOT NULL 可以利用索引。

  • 与其他数据库相比,MySQL 的索引对 NULL 的支持更完善且优化更好。

索引的优化

优化方面:sql本身优化、服务器/引擎(配置)优化、操作系统优化、硬件资源问题

1、sql优化达到的目的:

减少磁盘IO:避免全面扫描、使用索引(覆盖索引)
减少内存cpu消耗:尽可能减少排序、分组、去重之类的操作
修改索引或者说表定义变更的核心问题是数据库会加表锁,直到修改完成

示例:

1、使用覆盖索引和索引下推减少回表; 索引下推中范围查询排序的字段使用不当,使用了index where,增加字段走索引下推,优化 ORDER BY 将排序列加入索引。

2、用 WHERE 替换 HAVING(注意sql的执行顺序);如果不是使用聚合函数来作为过滤条件,最好还是将过滤条件优先写到WHERE 里面。

 wechat
天生我才必有用