一:索引失效

     

      1、

      

      2、最佳左前缀法则

        

      4、

      

    8、

      

      

        使用覆盖索引解决这个问题。

      

      

      

  二、索引优化

    1、ORDER BY 子句,尽量使用Index方式排序,避免使用FileSort方式排序

      MySQL支持两种方式的排序,FileSort和Index,Index效率高。它指MySQL扫描索引本身完成排序。FileSort方式效率较低。

      ORDER BY 满足两种情况,会使用Index方式排序

        ①ORDER BY语句使用索引最左前列

        ②使用WHERE 子句与ORDER BY子句条件列组合满足索引最左前列

    

    

  2、GROUP BY 关键字优化

    1、group by 实质是先排序后分组,遵照索引的最佳左前缀。

    2、当无法使用索引列,增大max_length_for_sort_data参数的设置+增大sort_buffer_size参数的设置

    3、where 高于having,能写在where限定的条件就不要去having去限定了。

二 explain体现

    extra下1 using tempoary2 using tempoary && using filesort3 using filesort4 none

三 实现方式

 1 定义 GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作,所以group by同样可以利用到索引2 实现方式使用松散(Loose)索引扫描实现 GROUP BY 1 单一表查询2 Group by中只有最左前缀列,没有其他列3 只支持max和min聚合,而且,要聚合的列必须是group by中列所在的索引(未测试)4 未被group by引用的索引其他部分必须是常量(不理解)5 不支持前缀索引。eg -- 因为聚合函数不是max或者minSELECT c1, SUM(c2) FROM t1 GROUP BY c1;-- 因为不符合最左前缀原则SELECT c1, c2 FROM t1 GROUP BY c2, c3;-- 查询涉及到了索引的一部分,紧跟group by中的列,但是没有常量等值语句,加上 WHERE c3 = const就好了SELECT c1, c3 FROM t1 GROUP BY c1, c2;2 使用临时表实现 GROUP BY 处理过程 通过where索引过滤 然后放置在临时表中再进行分组+排序
四 优化1 尽量使用group by 的分组利用到联合索引2 尽量添加order by null避免filesort
五  order by 使用场景解析select * from table  order by a1   当a1有索引的时候是可以利用到索引的select * from table where a1=1 order by b1   当a 和 b为联合索引且a为最左的时候 是可以利用到索引的select * from table  order by  a1 desc, b1   利用8.0的特性创建制定顺序的联合索引是可以的,其他情况下是不能利用到索引,因为联合索引只能按照一个顺序进行查找select * from table order by a1,b1              当a和b为联合索引时是可以利用到索引的select * from table  where a1 > n  order by  a1  这种情况下根据数据量的分布可能会利用到icp特性或者应用不到索引select * from table   where a1 = n and b1 > n order by b1  这种情况下可能会遇到ICP特性select * from table group a1 order by b1    这种情况下不能利用索引相关排序参数 sort_buffer_size 先利用这个参数内存,只有内存不够了才会在磁盘形成临时文件

MySQL高级- group by ,order by 索引优化相关推荐

  1. MySQL高级知识(六)——索引优化

    前言:索引优化的目的主要是让索引不失效,本篇通过相关案例对索引优化进行讲解. 0.准备 创建经典的tb_emp表. DROP TABLE IF EXISTS `tb_emp`; CREATE TABL ...

  2. 《MySQL高级篇》八、索引优化与查询优化

    文章目录 1. 数据准备 2. 索引失效案例 2.1 全值匹配我最爱 2.2 最左匹配原则 2.3 主键插入顺序 2.4 计算.函数.类型转换(自动或手动)导致索引失效 2.5 范围条件右边的列索引失 ...

  3. mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 create table tbl1 ( id int unique, sname varchar(50), index tbl1_index_sname(sname desc ...

  4. Mysql group by,order by,dinstict优化

    1.order by优化 2.group by优化 3.Dinstinct 优化 1.order by优化 实现方式: 1. 根据索引字段排序,利用索引取出的数据已经是排好序的,直接返回给客户端: 2 ...

  5. MySql ORDER BY 索引优化

    上一篇:MySql 索引优化 MySql 支持两种方式的排序,FileSort 和 Index ,Index 效率高,它指的是 MySql 扫描索引本身完成排序.FileSort 会对数据使用一个外部 ...

  6. MySQL高级篇——存储引擎和索引

     导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+牛客面试题_java黑马笔记 目录 ...

  7. MySQL高级-(存储引擎、索引、锁)

    MySQL高级 一.MySQL存储引擎 1.MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连 ...

  8. mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  9. 高级mysql优化知识_MySQL高级第三篇(索引优化分析)

    使用explain查看sql执行计划进行优化 使用方法,explain+sql语句,如:explain select * from student where id>10 执行计划字段 名次解释 ...

最新文章

  1. WhatFontIs - 字体百科全书,没有不认识的字体
  2. InputStream OutputStream 傻傻分不清
  3. 从外资银行上看国内银行的差距
  4. 3层vni vxlan_VLAN和VXLAN,两者有何区别?VXLAN运用场景有哪些?
  5. 关于静态类初始化问题----CSharp
  6. struts2 mysql 乱码_struts2项目插入中文到mysql数据库乱码的解决方法
  7. C# 实现连连看功能
  8. 计算机信息科学与应用技术学术论,第三届计算机信息科学与应用技术国际学术论坛(ISCISAT .DOC...
  9. 使用xorm工具,根据数据库自动生成 go 代码
  10. 一、计算二进制中1的个数
  11. 中小型软件项目开发一般流程建议
  12. 恒强制版系统980_恒强制版软件操作答疑
  13. 传奇hero引擎版本服务端转换GEE引教程教学篇
  14. java并发编程——创建线程之Thread 和 Runnable
  15. 华纳云:美国高防服务器的防火墙介绍
  16. [游戏代码]求生之路插件:人物获得武器
  17. 磁盘空间满问题排查方法
  18. 根据日期计算属于第几周(周日是一周的第一天)
  19. 阿里云被挖矿使用,导致cpu长期处于100%,ddgs进程,xWx3T进程,关于redis密码
  20. 硬盘安装FC6 linux

热门文章

  1. Codeforces 1334 D. Minimum Euler Cycle
  2. 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(一)
  3. [知乎]改变了中国彩票史的“西安宝马彩票案”
  4. 阿里云Java后端一面面经
  5. 不定积分——lnax与lnx相差一个C
  6. 电脑上媒体服务器在哪个文件夹,老物件之用老PC打造家用媒体服务器
  7. 性能测试框架——python+locust
  8. 包包各部位名称图解_[原创]整理出的包包名称及各部位英语集
  9. 绍兴哪里能买到高仿的香奈儿,普拉达包包
  10. 一些离谱的化学方程式