• mysql 通过使用联全索引优化Group by查询


    /*SELECT count(*) FROM (*/
    EXPLAIN  SELECT st.id,st.Stu_name,tmpgt.time,tmpgt.goutong FROM jingjie_students st RIGHT JOIN (
    SELECT * FROM _goutong gttime,(
    
    SELECT name_id nameid, max(time) time FROM t_goutong GROUP BY name_id) gt

    WHERE gttime.name_id=gt.nameid AND gttime.time=gt.time AND gttime.time>'2015-07-19 16:18:02') tmpgt ON st.id=tmpgt.name_id; /*) student_latested;*/

    //未使用联合索引时'GROUP BY name_id'查询使用的是全表扫描,

    //使用联合索引index name_id(name_id,time)后使用了索引:注意联合索引建立的先后顺序

    熟悉Group by使用索引的情况:

    一、GROUP BY 的索引应用
    1、查询字段必须和后面GROUP BY 一致
    select TeamID from competeinfo where TeamID >10 group by TeamID。
    这里就是通过TeamID 来查找。完成group by 。
    2、联合索引的应用,切记注意GROUP BY 顺序,Where 条件和GROUP BY 字段得是一个索引里面的
    这个表CompeteID,TeamID建立联合索引
    1)select TeamID from competeinfo where TeamID >10 and CompeteID > 100020 group by CompeteID
    这个查询用到了CompeteID,TeamID联合索引
    2)select TeamID from competeinfo where TeamID >10 and CompeteID > 100020 group by TeamID
    这样的话查询group by中就没有用到索引了
    二、下面是总结的是联合索引的使用
    Index(Name,Age)表示在Name,Age两列上建立联合索引
    如果where name='pp' 能使用索引
    where age=25时不能使用索引
    where name='pp' and age>25 能使用索引
    where name ='pp' order by age 能使用索引
    where name>'pp' order by age 不能使用索引
    where name>'pp' order by name,age 能使用索引
    order by name asc age desc 将不能使用索引!

  • 相关阅读:
    笔记04_正确使用Heterogeneous元件
    java网络通信:伪异步I/O编程(PIO)
    java网络通信:异步非阻塞I/O (NIO)
    lua源码学习篇二:语法分析
    lua源码学习篇三:赋值表达式解析的流程
    java网络通信:netty
    lua源码学习篇一:环境部署
    lua源码学习篇四:字节码指令
    java网络通信:同步阻塞式I/O模型(BIO)
    前端项目开发流程
  • 原文地址:https://www.cnblogs.com/hubing/p/4894026.html
Copyright © 2020-2023  润新知