zoukankan      html  css  js  c++  java
  • 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 将不能使用索引!

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/hubing/p/4894026.html
Copyright © 2011-2022 走看看