MySql数据库优化(2)

目录

 

MySQL数据库优化

子查询的优化

优化group by查询

Limit优化方式

优化步骤


MySQL数据库优化

子查询的优化

通常情况下,需要把子查询优化成为join查询,但在优化的时候要注意是否有一对多的关系,需要注意重复的数据。

查询sandra出演的所有影片:

MySql数据库优化(2)

如果这个子查询是一对多的关系,我们也需要考虑连接查询的数据重复问题。

举个例子,一张表t只有字段id,另一张表t1有id,也有对应的值

我们使用子查询,结果如下:

MySql数据库优化(2)

我们使用连接查询,结果如下:

MySql数据库优化(2)

所以我们在把子查询优化成连接查询的时候,要使用函数distinct去重,这样才达到了和子查询一样的效果。

MySql数据库优化(2)

优化group by查询

查询电影表中演员为id的演员所演的电影名字,和参演的电影数量。

其中USING (actor_id)等价于 on actor.id=film_actor.id

MySql数据库优化(2)

这种查询没有where,所以会有临时表,会进行查询。

优化方法如下:

MySql数据库优化(2)

改写之后已将没有临时表和文件排序的问题了。

Limit优化方式

limit语法

  • limit 5,  0~5,不包含0;
  • limit 4,-1  4~最后,不包含4
  • limit 3,2   4,5两条记录

limit常用于分页处理,时常会伴随order by从句使用,因此大多时候会使用Filesorts(文件排序)这样会造成大量的IO问题。

MySql数据库优化(2)

这个语句查询了从第50行开始的,后5条记录。

优化步骤

  • 使用有索引的列或主键进行order by 操作,下面的例子使用的是主键,有主键索引。(不会使用用文件排序的方式)

MySql数据库优化(2)

  • 如果我们查询的数量过大,那么我们就需要记录上次返回的主键,在下次查询时使用主键过滤。(这里通过where条件进行过滤)

MySql数据库优化(2)

到这为止mysql的语句优化告一段落,接下来就是mysql的索引优化。