MySQL 处理海量数据时的一些优化查询速度方法

xiaoxiao2021-02-28  111

博客分类: mysql mysql 优化 

MySQL 处理海量数据时的一些优化查询速度方法

2017-04-29

在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如果查询时间高达几十秒,这么高的查询延时,任何用户都会抓狂。因此如何提高 SQL 语句查询效率,显得十分重要。

查询速度慢的原因

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)

2、I/O 吞吐量小,形成了瓶颈效应。

3、没有创建计算列导致查询不优化。

4、内存不足

5、网络速度慢

6、查询出的数据量过大(可采用多次查询,其他的方法降低数据量)

7、锁或者死锁(这是查询慢最常见的问题,是程序设计的缺陷)

8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。

9、返回了不必要的行和列

10、查询语句不好,没有优化


30 种 SQL 查询语句的优化方法:

1、应尽量避免在 where 子句中使用 != 或者 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

1 select id from t where num is null;

可以在 num 上设置默认值 0 ,确保表中 num 列没有 null 值,然后这样查询:

1 select id from t where num = 0;

3、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

1 select id from t where num = 10 or num = 20;

可以这样查询:

1 2 3 select id from t where num = 10 union all select id from t where num = 20;

5、下面的查询也将导致全表扫描:(不能前置百分号)

1 select id from t where name like '
转载请注明原文地址: https://www.6miu.com/read-68049.html

最新回复(0)