MySQL优化常见场景与方法(新手小白向)

MySQL作为最流行的关系型数据库之一,在应对海量数据和高并发场景时常常面临性能瓶颈。这篇文章作为博主项目实践中的总结,作为电子存档方便以后调优。

在MySQL的优化中,无非是分为三个大类:SQL语句索引其它事项

一、SQL语句

1.1 少使用SELECT *

除了我们需要的字段,其它多余的字段会大幅增加数据传输量,有碍于数据库的吞吐;

可以用索引优化提升查询的效率,SELECT*则是最后的选择

1.2 避免子查询,用JOIN代替
-- 原始
SELECT * FROM products 
WHERE category_id IN (
  SELECT id FROM categories WHERE parent_id=5
);

-- 优化(JOIN改写)
SELECT p.* 
FROM products p
JOIN categories c ON p.category_id=c.id
WHERE c.parent_id=5;

这里的example两种写法是同样的结果,但是JOIN拥有更高的效率。不会JOIN的小伙伴可以去看看这篇文章JOIN方法

1.3 用 UNION/UNION ALL 代替 OR(不一定)
#用OR
SELECT name, population, area
FROM World
WHERE area > 3000000 OR population > 25000000

#用Union
SELECT name, population, area
FROM World
WHERE area > 3000000 
UNION
SELECT name, population, area
FROM World
WHERE population > 25000000
  1. 优先使用UNION ALL​​ 当不同条件有独立索引时

  2. ​​OR适用场景​​ 单一字段多值查询(status IN (1,3)

1.4 %开头的LIKE查询

模糊查询会导致MySQL无法确定索引起始点,没了索引效率自然就大大降低。因此应当尽量避免

1.5 WHERE上面尽量不用函数
1.6 避免使用 != <>

二、索引

2.1 常用的查询条件、连接条件加索引

众所周知,索引是MySQL数据库的一个大目录,作为一个已经排好序的B+树,用它查找时自然效率要高得多。但是也请注意,索引的增加也就意味着存储空间的增加。

2.2  覆盖索引

本质上是减少回表的操作,回表也就意味着要进行两次查表,实践中应当尽量避免

2.3 适当使用前缀索引
2.4 正确使用联合索引,避免过多的列使用复合索引

这一点可能比较抽象。想象一下,一个联合索引由n个字段来构成的,当我们需要进行INSERT操作时,这个联合索引有极大的可能重构(n越大,可能性越大)!索引的重构无疑是加重了数据库的负担

2.5 更新频繁的列少用索引
2.6 避免范围查询数据量过多,导致索引失效

三、其它事项

3.1 Explain工具 

Explain工具使用

3.2 分页优化

分页技术可以有效地控制数据加载量,提高用户界面的响应速度,减少服务器的负载,保证用户体验的流畅性。它使得前端能够按需加载数据,后端则能减少无谓的计算和资源消耗。通过MyBatis-PageHelper插件优化分页性能。

你可能感兴趣的:(mysql,数据库)