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 将不能使用索引!

时间: 2024-10-21 16:28:20

mysql 通过使用联全索引优化Group by查询的相关文章

MySQL索引优化分析和SQL优化

1 配置环境的说明 MySQL的版本信息: 系统版本信息: 2 索引的分析 2.1数据准备 2.1.1数据库建表SQL 表的说明: id是自增主键,name是唯一索引,age 是非唯一索引,desc无索引 CREATE TABLE `index_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `name` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT ''

SQL语句及索引优化

一.Count()和Max()的优化方法 1.查询最后支付时间-优化max()函数 1)语句:select max(payment_date) from payment; 2)查看执行计划:explain select max(payment_date) from payment \G 3)优化方案(建立索引):create index idx_paydate on payment(payment_date); 2. 在一条SQL中同时查出2006年和2007年电影的数量-优化count()函数

MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有).在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表. 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字.是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引.为该部分指定的条件,以及选择的累积函数. 由于GROUP BY 实际上也同样会进行排序操作,而

mysql索引优化及explain关键字段解释

一.explain关键字解释 1.id MySQL QueryOptimizer 选定的执行计划中查询的序列号,表示查询中执行select 子句或操作表的顺序.id 值越大优先级越高,越先被执行.id 相同,执行顺序由上至下. 2.select_type (1) SIMPLE 简单的 select 查询(不使用 union 及子查询). (2) PRIMARY 最外层的 select 查询. 如果两表存在则查询,则外层的表操作为PRIMARY,内层(子查询)的操作为SUBQUERY. 如果两表做

Mysql 索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句.还在等啥子?撸起袖子就是干! 案例分析 我们先简单了解一下非关系型数据库和关系型数据库的区别. MongoDB是NoSQL中的一种.NoSQL的全称是Not only SQL,非关系型数据库.它的特点是性能高,扩张性强,模式灵

mySql索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句.还在等啥子?撸起袖子就是干! 案例分析 我们先简单了解一下非关系型数据库和关系型数据库的区别.MongoDB是NoSQL中的一种.NoSQL的全称是Not only SQL,非关系型数据库.它的特点是性能高,扩张性强,模式灵活

MySQL的索引优化,查询优化

MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.

数据库优化(二)—— MySQL索引优化

目录 MySQL的索引优化 一.MySQL 5.7的初始化配置 二.MySQL配置文件 1.配置 2.配置文件作用 三.多实例 1.创建相关的目录 2.创建实例的配置文件 3.初始化 4.授权 5.启动实例 6.查看启动状况 7.测试 8.配置启动脚本 9.开机自启 10.设定mysql密码 11.忘记密码 四.数据类型 1.整型 2.字符串类型 3.时间类型 规范 五.索引 1.索引作用 2.索引种类 3.Btree 分类 4.聚集索引和辅助索引的对比 六.MySQL索引管理 1.创建索引(辅

Mysql优化(出自官方文档) - 第八篇(索引优化系列)

目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexes 3 Column Indexes && Multiple-Column Indexes 4 Comparison of B-Tree and Hash Indexes 5 Use of Index Extensions 6 Invisible Indexes 7 Descending In