MySQL索引

索引是要存储在硬盘中的,磁盘的I/O操作相比于内存来说时间消耗要高的。
所以一次查询,应该要尽量减少磁盘I/O的次数!

二叉查找树(Binary Search Tree)的局限性
二叉搜索树的特点:父节点左子数的所有节点都小于父节点,右子树所有节点都大于父节点
查询的时间复杂度为O(log(N))
如果用二叉树作为索引的实现结构,会让树变得很高,增加硬盘的 I/O 次数,影响数据查询的时间。

InnoDB的索引结构:B+树

  • 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。
  • 叶子节点本身按照关键字的大小从小到大顺序链接。

相比于B树的优势

  • 叶子节点不保存数据记录在磁盘页大小相同的情况下,B+树的高度更矮,磁盘操作更少
  • 范围查询更方便,叶子节点有序

聚簇索引和非聚簇索引

  • 聚簇索引:叶子节点存储的是数据记录
  • 非聚簇索引:叶子几点存储的是主键的值

非聚簇索引是有单独空间来存储的,在使用非聚簇索引来查找时,先查找到主键的值,再去主键索引的树上去获取数据。

覆盖索引:可以通过索引即可查询到所有记录,不需要回表到聚簇索引

联合索引的创建原则:ESR

  • 精确(Equal)匹配的字段放最前面
  • 排序(Sort)条件放中间
  • 范围(Range)匹配的字段放最后面

创建索引的情况

  • 频繁作为 WHERE 查询条件的字段
  • 需要 GROUP BY 和 ORDER BY 的列
  • 表连接字段

索引失效的情况

  • 索引使用了表达式计算
  • 索引使用了函数
  • WHERE 子句中,如果在 OR 前的条件列进行了索引,而在 OR 后的条件列没有进行索引,那么索引会失效
  • 模糊查询以%开始
  • 使用联合索引注意最佳左前缀原则
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值