索引

排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图就是一种可能的索引方式示例:

数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,
这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

聚合索引

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个

聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续

聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序

非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序.

索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

https://www.cnblogs.com/s-b-b/p/8334593.html https://www.cnblogs.com/shangfz/p/11270621.html

非聚合索引会造成二次查询的问题

前提 已经存在索引 areaId

实验:

# 查询的时候使用了索引EXPLAIN SELECT   areaID  FROM area where areaID = '130103'

 EXPLAIN SELECT areaID ,area  FROM area where areaID = '130103'
# 查询过areaID的值后,又进行了二次查询得到 area

对于二次查询的问题, 可以使用下面的组合索引方式来解决!

组合索引 ( 覆盖索引 )

组合索引就是给数据库中的多列添加索,如添加一下的组合索引,其中组合索引先安装第一列排序,然后在第一列排序的基础上排序第二列,依次类推。如果第一列没有用到索引,那后面用到的索引也就会失效了。

 (a,b,c)

根据mysql的最左匹配原则,从最左边开始匹配。

where a = 1 and b = 2 and c = 4 # 全部起作用
where b = 1 and a = 2 and c = 4 # 全部起作用  条件的顺序会优化
where b = 2 and c = 4 # 此时 a 是个断点,a后面的索引全部失效, 此写法组合索引无作用
where a = 1 and c = 2  #  a 是起到作用的, c无作用

组合索引使用判断:

(0) select * from mytable where a=3 and b=5 and c=4;

abc三个索引都在where条件里面用到了,而且都发挥了作用

(1) select * from mytable where c=4 and b=6 and a=3;

这条语句列出来只想说明 mysql没有那么笨,where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样

(2) select * from mytable where a=3 and c=7;

a用到索引,b没有用,所以c是没有用到索引效果的

(3) select * from mytable where a=3 and b>7 and c=3;(范围值就算是断点)

a用到了,b也用到了,c没有用到,这个地方b是范围值,也算断点,只不过自身用到了索引

(4) select * from mytable where b=3 and c=4;

因为a索引没有使用,所以这里 bc都没有用上索引效果

(5) select * from mytable where a>4 and b=7 and c=9;

a用到了 b没有使用,c没有使用

(6) select * from mytable where a=3 order by b;

a用到了索引,b在结果排序中也用到了索引的效果,前面说了,a下面任意一段的b是排好序的

(7) select * from mytable where a=3 order by c;

a用到了索引,但是这个地方c没有发挥排序效果,因为中间断点了,使用 explain 可以看到 filesort

(8) select * from mytable where b=3 order by a;

b没有用到索引,排序中a也没有发挥索引效果

l

实验

1、创建索引

CREATE INDEX  areaid_area_fatherid on area(areaID,area,fatherID)


2、测试最好

按照顺序查询的结果,符合最左原则。

EXPLAIN SELECT * from area  WHERE areaID = '110116' AND area = '怀柔区' and fatherID = '110100'

3、测试不符合最左情况

EXPLAIN SELECT * from area  WHERE area = '怀柔区' and fatherID = '110100'

把首列索引删去之后的查询效果, 3144行

mysql聚合索引、组合索引相关推荐

  1. MySQL中的组合索引

    MySQL中的组合索引(复合索引) 使用多个字段创建索引,只用在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则): 一.最左前缀原则 最左优先: 例 使用表中的name,addr ...

  2. 复合索引 /多列索引 /联合索引 /组合索引?????

    复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法. 含有多个列字段的索引 联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 例如: 创建数据库表CREATE ...

  3. MySQL调优(三):索引基本实现原理及索引优化,哈希索引 / 组合索引 / 簇族索引等

    索引基本知识 索引匹配方式 哈希索引 当需要存储大量的URL,并且根据URL进行搜索查找,如果使用B+树,存储的内容就会很大 select id from url where url="&q ...

  4. mysql怎么建组合索引_mysql索引及建立组合索引原则

    两个重要概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. 2.对于多列索引来说(a,b,c)其相当于3个索引(a),(a,b),(a,b,c)3个索引,又由 ...

  5. MySQL数据库索引组合索引的最左优先原则

    最左优先原则:组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到.只要组合索引最左边第一个字段出现在Where中,那么不管后面的字段出现与否或者出现顺序如何,MySQL引擎都会自动调用索引来 ...

  6. mysql 主键 索引类型_MYSQL常见索引类型(主键索引/唯一索引/普通索引/组合索引)...

    在数据量特别大的数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令MySQL的查询和运行更加高效. 一.MySQL常见的索引类型如下 MySQL常见索引有:主键索引.唯一索引.普 ...

  7. mysql如何创建组合索引

    组合索引,也就是表中的某几列数据组合起来,结果要是唯一的. 具体语法为: CREATE UNIQUE INDEX index ON table( col1, col2, col3 ) ; table为 ...

  8. 普通索引 唯一索引 主键索引 组合索引 全文索引

    普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: (1)直接创建索引 CREATE INDEX index_name ON table(column(length)) (2)修改表结 ...

  9. mysql 组合索引 or_Mysql_组合索引和单列索引

    一.目标 什么时候使用组合索引,什么时候使用单独索引 组合索引.单独索引区别 组合索引:最左前缀匹配原则 二.前期数据准备 1. 建表 CREATE TABLE `user` ( `uid`int(1 ...

最新文章

  1. 分分钟搞定 JSP 技术
  2. tomcat war java_java – 启动Tomcat WAR
  3. js生日计算年龄_JS根据生日算年龄的方法
  4. 【转】C++学习一 结构与结构体
  5. 五分钟教你如何用函数计算部署钉钉群发机器人
  6. 计算机的硬盘 内存在哪查到,电脑硬盘内存怎么查看
  7. 卢伟冰宣布Redmi新机即将发布 疑为Redmi 8A
  8. php yyuc框架,如何学习YYUC框架
  9. 阿里云数据库迁移手记
  10. 单层工业厂房设计原理以及知识重点
  11. 新版标准日本语中级_第十四课
  12. 计算机毕业论文提纲如何写,计算机毕业论文提纲怎么写
  13. EasyBoot教程三:制作GHOST多重启动盘方法
  14. 这篇文章来自我的微信朋友圈,并不特别好玩,但可以给创业者补点财务知识
  15. 树莓派控制DS18B20温度传感器
  16. java中String优化之intern()方法
  17. 【日常学习】【数学】codevs3625 士兵站队问题题解
  18. 百分之百还原《京东商城》项目实战1
  19. hdu 4389 X mod f(x) (数位dp||打表)
  20. 蓝牙协议栈消息的关联

热门文章

  1. 内涵社 weixin.php,GitHub - yzbx/weixin: This is an enclosed class for WeChat apis. 微信公共平台api的php封装...
  2. Java后台开发面经汇总
  3. java总结(基础知识-面试)
  4. Excel如何简单快速在行上输入ABC序列?
  5. Python 处理GBK编码转UTF-8读写乱码问题
  6. 苹果电脑恢复照片|单反相机照片删除怎么恢复?
  7. c语言线程的创建步骤,C语言创建线程thread_create()的方法
  8. 2023牛客寒假算法基础集训营5(通过ABCDHIKL) I题有详解(F已补)
  9. 墨者学院_Linux硬盘文件分析取证(恢复文件)
  10. idea 配置多个git账号_IDEA配置git