加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

MySQL查询语句很慢?

发布时间:2021-03-07 15:03:02 所属栏目:动态 来源:互联网
导读:接查询的优化 无论什么数据库,多表连接的查询成本都是比较高的,因此对于高并发应用,应该尽量减少有连接的查询,多表连接的个数不要超过4张表。一般数据量少的时候,连接开小不大,一般不会有性能问题,当数据量变大后,那么性能问题就会比较突出。所以在

接查询的优化

无论什么数据库,多表连接的查询成本都是比较高的,因此对于高并发应用,应该尽量减少有连接的查询,多表连接的个数不要超过4张表。一般数据量少的时候,连接开小不大,一般不会有性能问题,当数据量变大后,那么性能问题就会比较突出。所以在数据库初期最好能确定哪个表能成为大表,然后进行反范式设计减少连接的表,例如增加冗余字段等等,或者在业务代码中进行连接计算。

一些经验总结点:

1、ON、USING字句中的列确认有索引,如果连接的顺序为B、A,那么只需在A表的列上创建索引即可,无需在B中建索引,可以减少不必要索引开销。

查询举例:
 

YSQL会全表扫描B表,对B表的每一行记录去寻找A表记录,所以需用A表COL2列上索引来提高效率。

2、使用EXPLAIN 检查连接,看ROWS列,如果该列值太高,比如几千,上万的,那么就需要考虑是否索引无效后者连接表的顺序不对了。

3、考虑在应用层实现连接查询,例如可以在JAVA中把复杂的查询分解为几个简单查询,得到一个较小的结果集合,处理遍历后,再根据条件获取完整数据,这样做往往更高效,因为把数据分离,更不容易变化,有利于数据库缓存数据。

举例如下:



 

这些语句默认都要进行ORDER BY排序,优化的思路比较类似。

1、如果多张表进行连接查询,ORDER BY 的列应属于连接顺序的第一张表。如果不在同一个表中,那么可以考虑冗余一些列,或者合并表。

2、需要保证索引列和ORDER BY的列相同,且各列按照相同的方向进行排序。

3、指定ORDER BY NULL,默认情况下,MYSQL将排序所有GROUP BY的查询,如果想要避免排序结果所产生的消耗,可以指定ORDER BY NULL。

举例如下:

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!