美文网首页
MySQL多列索引

MySQL多列索引

作者: 小怪兽狂殴奥特曼 | 来源:发表于2018-10-25 17:15 被阅读13次

MySQL多列索引

1 INNODB引擎为什么适用B+树,而不适用hash?

1.1 hash的特点

哈希优点:

  • 单向存取速度快,速度位O(1)
    哈希缺点:
  • 1.哈希值随意,导致记录存放的位置是随机的。mysql的随机存取性能很差。
  • 2.哈希在范围查询上表现很差
  • 3.哈希不利于排序
  • 4.无法利用前缀索引。例如,hello,world 和hello,innodb中可以建立联合索引,适用xx=hello和xx=hello,world都可以适用到索引。但是hello和hello, world两个字符串的哈希值都不同,导致两者之间没有关系,无法建立索引。

1.2 B+树的特点

优点:

  • 可以认为B+树是一个排好序的结构化表,对范围查找、排序方面性能很好。

innodb联合索引的最左前缀匹配规则

对于某个插叙语句,例如where c1=a and c2=b,要建索引,联合索引(c1, c2)的效果要比单独给每个查询列建立索引的效果要好。单独给每个列建立索引,则只会适用到索引列c1,而联合索引则能够同时适用两个列的索引。
实际应用最常用的是联合索引。
最左前缀匹配的规则如下:

  • 匹配的时候从左向右逐步匹配。中间不能缺少索引项。例如对于索引(a, b, c), 相当于建立了三个索引(a), (a,b), (a,b,c)。对于(b), (c), (b, c)索引是没法使用的。类似where b=xx and c=xxx是使用不了索引的,因为从左向右匹配,没有符合要求的索引。
  • =,in可以乱序。例如,where a=1 and b=2 和 where b=2 and a=1是一样的效果。MYSQL的优化器会对这种条件进行优化。使两者都能使用(a,b)这个索引。
  • 遇到<, >, like, between,匹配会停止。但是会使用到呗停止的当前列。对于索引(a,b,c,d)索引,where a=1 and b=2 and c>3 and d=4则,只会用到索引(a, b, c)
  • 如果order by的是索引列,则该列可以使用索引,并继续向右匹配。

相关文章

  • 索引

    MYSQL索引 MYSQL中索引文件以B树结构存储,索引可分为单列索引和多列索引。 对于多列索引中,当一个SQL语...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

  • MySQL 多列索引

    MySQL 多列索引 多列索引也叫联合索引又叫复合索引也就是把多个字段按顺序连起来创建一个索引 ( 最多16列 ...

  • MySQL多列索引

    MySQL多列索引 1 INNODB引擎为什么适用B+树,而不适用hash? 1.1 hash的特点 哈希优点: ...

  • mysql多列索引

    mysql多列索引 复合索引 这几天面试了一家公司,面试官问了个关于复合索引的,本以为对索引数据结构很了解了,谁知...

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

  • Mysql索引失效

    mysql 索引失效的原因有哪些?Mysql索引失效的原因 1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原...

  • MySql 索引使用总结-基础篇

    Mysql索引 一.索引概述 简单的说,索引就是对某表中一列或若干列值进行排序的结构.它由该表的一列或者多列的值,...

  • 49-MySQL-索引的创建与删除

    一、索引分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等①:从功能逻辑上说...

  • MySql 联合索引分析

    定义 将表中的多列(两列或以上)作为索引称为联合索引(或者符合索引)。 原理 摘自Mysql高性能 第三版 144...

网友评论

      本文标题:MySQL多列索引

      本文链接:https://www.haomeiwen.com/subject/otyctqtx.html