| 1、group by使用索引的原则几乎跟order by一致,group by即使没有过滤条件用到索引,也可以直接使用索引。 |
| 2、group by先排序再分组,遵照索引建的最佳左前缀法则 |
| 3、当无法使用索引列,增大max_length_for_sort_data和sort_buffer_size参数的设置 |
| 4、where效率高于having,能写在where限定的条件就不要写在having中了 |
| 5、减少使用order by,和业务沟通能不排序就不排序,或将排序放到程序端去做。order by、group by、distinct这些语句较为耗费CPU, |
| 数据库的CPU资源是极其宝贵的。 |
| 6、包含了order by、group by、distinct这些查询的语句,where条件过滤出来的结果集请保持在1000行以内,否则SQL会很慢。 |
| 一般分页查询时,通过创建覆盖索引能够比较好地提高性能。一个常见又非常头疼的问题就是limit 2000000,10,此时需要MySQL排序前2000010记录, |
| 仅仅返回2000000-2000010的记录,其他记录丢弃,查询排序的代价非常大。 |
| |
| EXPLAIN SELECT * FROM student LIMIT 2000000,10; |
| |
| # 优化方式1:在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容 |
| EXPLAIN SELECT * FROM student t, (SELECT id FROM student ORDER BY id LIMIT 2000000,10) a WHERE t.id = a.id; |
| |
| # 优化方式2:该方案适用于主键自增的表,可以把Limit查询转换成某个位置的查询 |
| EXPLAIN SELECT * FROM student WHERE id > 2000000 LIMIT 10; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-06-17 jdbc操作mysql(三):利用注解封装
2021-06-17 jdbc操作mysql(二):封装