目录
MySQL数据库优化
子查询的优化
通常情况下,需要把子查询优化成为join查询,但在优化的时候要注意是否有一对多的关系,需要注意重复的数据。
查询sandra出演的所有影片:
如果这个子查询是一对多的关系,我们也需要考虑连接查询的数据重复问题。
举个例子,一张表t只有字段id,另一张表t1有id,也有对应的值
我们使用子查询,结果如下:
我们使用连接查询,结果如下:
所以我们在把子查询优化成连接查询的时候,要使用函数distinct去重,这样才达到了和子查询一样的效果。
优化group by查询
查询电影表中演员为id的演员所演的电影名字,和参演的电影数量。
其中USING (actor_id)等价于 on actor.id=film_actor.id
这种查询没有where,所以会有临时表,会进行查询。
优化方法如下:
改写之后已将没有临时表和文件排序的问题了。
Limit优化方式
limit语法
- limit 5, 0~5,不包含0;
- limit 4,-1 4~最后,不包含4
- limit 3,2 4,5两条记录
limit常用于分页处理,时常会伴随order by从句使用,因此大多时候会使用Filesorts(文件排序)这样会造成大量的IO问题。
这个语句查询了从第50行开始的,后5条记录。
优化步骤
- 使用有索引的列或主键进行order by 操作,下面的例子使用的是主键,有主键索引。(不会使用用文件排序的方式)
- 如果我们查询的数量过大,那么我们就需要记录上次返回的主键,在下次查询时使用主键过滤。(这里通过where条件进行过滤)
到这为止mysql的语句优化告一段落,接下来就是mysql的索引优化。