mysql order by limit slow 慢查询
来源:互联网 发布:免费的crm软件 编辑:程序博客网 时间:2024/06/05 17:42
最近项目中遇到很奇怪的事情 言简意赅: 背景:数据量大约在300万左右, id为主键,有一个有好几个字段的索引, INDEX_1(f1,f2,f3,f4) , sql 查询条件为 f1=1, w5=xx,w6=zz.....,order by id desc limit 10; 加上where条件之后总的查询结果集才3条, 查询时间在 7秒左右,但是去掉order by id desc ,查询就变成0.3 秒。突然很困惑查询只要0.3秒的sql,并且查询结果才3条记录,然后加一个order by id desc limit 10 查询时间就变成7s了??
解决方案去掉 INDEX_1(f1,f2,f3,f4) , 加上索引 INDEX_2(f1)
原因: 在分析的时候被先执行where 条件后再执行order by 这个规则误导了很久,其实这个规则是对的,但是order by 也会影响执行计划,order by id 会使得sql优化器把 id的索引优先级调的非常高,索引INDEX_1(f1,f2,f3,f4) 在查询条件为 f1=1, w5=xx,w6=zz.....,的时候确实能用上,但是加了order by id 之后,优化器会会觉得INDEX_1 索引只用到了f1 ,效率没有主键索引高,所以在查询的时候会使用主键查询而不使用INDEX_1,所以单独新建一个索引INDEX_F1(f1) 使得编译器 在有主键索引的时候也选择INDEX_F1 这个索引(网上说的使用强制索引,也能解决 问题,但个人觉得在项目中使用不靠谱,不推荐使用,优化索引才是正解),想更深入的了解,可以学习b+树,和索引原理。这里只是记录下大概解决方案。
当然如果你用的是阿里云的mysql,貌似不会出现这个问题,用阿里云还出现order by 慢查询问题的,可以不用看这个帖子了!
- mysql order by limit slow 慢查询
- MySQL联合查询,order by与LIMIT
- mysql order by limit
- MySQL 查询之 limit,distinct,order by 以及字表操作
- MySQL数据分页查询---limit、order by的使用
- MySQL查询优化:连接查询排序limit(join、order by、limit语句)
- MySQL查询优化:连接查询排序limit(join、order by、limit语句)
- MySQL查询优化:连接查询排序limit(join、order by、limit语句)
- MySQL数据库order by 主键(索引) 查询慢解决方案
- mysql group by order by limit 1
- MySQL 慢查询日志(Slow Query Log)
- MySQL 慢查询日志(Slow Query Log)
- MySQL 慢查询日志(Slow Query Log)
- MySQL查询子句(group by,limit,union,order by等)
- MySQL数据库——对查询结果的基本操作(GROUP BY、HAVING、ORDER BY、LIMIT)
- mysql中的union和order by、limit
- MySQL ORDER BY With LIMIT and ANALYZE
- mysql中的union和order by、limit
- Spring----@Resource和@Autowired
- MyEclipse/Eclipse的一些技巧
- idea中git远程版本回退
- 自定义EL函数
- getRectSubPix函数
- mysql order by limit slow 慢查询
- Bitmap 的加载
- 获取数据库字符串最大值
- HTML5伪类选择器
- Pixhawk入门指南-目录
- 【Android】Percent Support Library实践
- 大数据名词分析
- 公众号编辑器开发,实现编辑器前端页面
- C语言实现顺序表