生成的sql带有distict导致查询效率下降-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

生成的sql带有distict导致查询效率下降

2016-02-13 11:45:28 2375 1

用 sonata-project/admin-bundle 做的后台,上线2个月左右,出现了一个性能问题,把调试工具打开发现在查询列表的时候 有2条SQL语句执行特别慢
screenshot
以上两条SQL随着项目的增大,执行时间越来越长。目前150W左右数据执行时间需要 18058.10 ms

我猜想是 knplabs/knp-paginator-bundle 在分页和查询总数的时候 总数带上了关键字 "DISTINCT"

我把这两条语句的关键字 DISTINCT 去掉以后,直接拿到数据库执行只需要 5ms 。所以我去查找 symfony2、sonata-project/admin-bundle、knplabs/knp-paginator-bundle 对于这个关键字的处理或者配置,但是持续查找了快一个礼拜都没有结果。

希望有知道这个问题的大神能够帮助我分析分析

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:41:52

    tuser_recharge.user_id 看上去必是 user.id 的子集,你在tuser_recharge(1.5m)上做DISTINCT,再怎么JOIN也没什么用,况且两个语句并不从user表关联取值,所以JOIN是多余的。

    但真正的问题还是在tuser_recharge的数据量,1.5m数据作DISTINCT,哪怕user_id有索引也不影响DISTINC的执行,mysql会遍历整个索引,1.5m记录,假设索引里单记录执行花费0.00001秒,光遍历索引就需要大概0.000001x1500000=1.5秒,你画出的第一条语句的执行结果就在这个数量级上。
    这你可以直接跑
    SELECT DISTINCT user_id
    FROM tuser_recharge
    来验证,速度会在一个数量级上。
    第二条语句要慢很多,是因为除了遍历整个1.5m的索引,还需要产生临时表做SORT(因为ORDER BY),慢是可想而知的。
    优化的思路,第一是看你是否有用WHERE的可能,即避免让DISTINCT遍历整个索引,而用WHER先缩小范围。
    SELECT DISTINCT user_id
    FROM tuser_recharge
    WHERE col = xxx
    如果业务不允许,那么最好的办法不是优化DINSTINCT,而是优化你的架构。通常操作思路是把前端代码和慢SQL语句解耦,做一个MYSQL SLAVE,用一个后台程序定时执行慢语句,把结果存入某个地方,前端语句直接读取这个结果,不经过mysql。这样的好处是前端不会再有伸缩性问题,坏处是牺牲了一定的实时性。如果你控制后台语句每一分钟执行一次,对一般业务也不至于产生什么问题。通常用户前端有一分钟或者几分钟的延迟并不是什么大问题。
    这样做你在架构上的收益是最大的,因为一个慢语句的成本不只是这个慢语句本身,还会BLOCK其他语句的执行,这是在线系统数据库最应该避免的。

    0 0
相关问答

1

回答

最近老板让注意SQL的执行效率,让我了解下SQL的写法规范,求指点

2021-10-12 11:15:53 214浏览量 回答数 1

1

回答

我想在ECS Windows Server 2008系统上安装配置MS SQL Server 2008数据库,有教程吗?

2018-01-12 13:37:10 3697浏览量 回答数 1

1

回答

ECS Windows SQL Server 2008服务1433端口不监听可能是哪些问题的?

2018-01-12 13:39:04 2259浏览量 回答数 1

1

回答

ECS无法登录SQL Server并报网络相关错误。

2018-01-12 13:39:33 1609浏览量 回答数 1

1

回答

如何将自建SQL Server 2008 数据库修改列为自增列?

2018-01-12 13:41:06 2072浏览量 回答数 1

1

回答

ECS自建的SQL Server 2008忘记sa密码了,怎么办?

2018-01-12 13:41:24 1778浏览量 回答数 1

0

回答

SQL Server实例管理页面简介

2017-10-17 17:13:45 1408浏览量 回答数 0

1

回答

SQLServer性能数据解析

2017-06-23 11:00:16 3827浏览量 回答数 1

2

回答

SQL SERVER 查询都有哪些权限

2016-06-08 15:37:06 2903浏览量 回答数 2

1

回答

SQL Server转 MySQL的方法或工具

2016-02-14 15:21:07 2081浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
文章
问答
问答排行榜
最热
最新
相关电子书
更多
MaxCompute SQL计算成本调优以及优化方法
立即下载
时序数据库TSDB新功能 - 如何用SQL进行时序查询
立即下载
用SQL做数据分析
立即下载