mysql中groupby会用到索引吗_MySQL的优化实验 group by和order by索引字段效率会高...

文章讲述了MySQL中的索引优化,通过实例展示了GROUP BY和ORDER BY使用索引字段能显著提高查询效率。作者强调不同数据库对SQL的执行计划存在差异,建议对数据库原理深入理解并谨慎编写SQL,特别是在涉及大量存储过程的团队中,应当有专业DBA参与以确保SQL性能。
摘要由CSDN通过智能技术生成

最近决定将以前同事写的存储过程查看一遍,寻找一些代码上写的不太好的地方,争取进行修改以后让这些过程达到一个很好的运行速度。下面是遇到的最多的几个问题。

我遇到了这样的一个SQL:

select name, count(*) from (select name from table_1) a group by

a.name;

MySQL的执行计划对于这种派生表的解释非常的不友好,但是能直观的感觉到的是,这个SQL执行速度特别的慢。查看这个表table_1发现,name字段是有索引的。审视这段代码,可以推断出当时程序员的想法,应该是想让数据库扫描更小的结果集,因为select

*是很不好的习惯。不过他应该忽略了一个MySQL的很重要的特点就是索引。MySQL的索引是个很有意思的东西,是我从Oracle转过来感觉最好玩的东西,好玩的地方就在于,可以优化group

by。当我把这个SQL改成如下SQL以后:

select name, count(*) from table_1 group by name;

这样一来,这段SQL的执行速度就非常的快了,extra列明确的显示了using index,索引覆盖查询,速度杠杠的。

其实这种错误应该是程序员常犯的,因为程序员对Java等代码超级熟悉,但是对于SQL,基本上都是大学的时候学习的SQL,用SQLServer练出来的,基本上没有对数据库进行非常深入的研究,其实每种数据库中,同一条SQL的执行计划都是不尽相同的,这也就是企业有一个专业的DBA的一个作用。

下面,就是一个让人很头疼的错误:

select n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值