美文网首页
MySql SQL语句优化

MySql SQL语句优化

作者: zshanjun | 来源:发表于2017-03-13 18:07 被阅读85次

count 优化

案例,在一条SQL语句中同时查出2006年和2007年电影的数量

错误方式:
1、 select count(release_year='2006' or release_year='2007') from film;

无法分开计算2006和2007年的电影数量

2、select count(*) from film where release_year='2006' and release_year='2007';

release_year不可能同时为2006和2007,因此逻辑上有错误

正确写法:

select count(release_year='2006' or null) as '2006film', count(release_year='2007' or null) as '2007film' from film;

max 优化

给需要计算max列添加索引

子查询优化

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

例如
select p.*, y.yarn_ratio from new_products as p join new_product_yarn_ratios as y on y.product_id=p.id \G
会返回200条数据,里面就有重复的.
这时候需要用到关键字distinct:
select distinct p.*, y.yarn_ratio from new_products as p join new_product_yarn_ratios as y on y.product_id=p.id \G
,这时候返回195条。

group by查询优化

案例:查询演员的参演次数

explain select actor.first_name, actor.last_name, count(*)
 from sakila.film_actor
 inner join sakila.actor using(actor_id)
 group by film_actor.actor_id;

执行方案:

\2.PNG\2.PNG

改写后:

explain select actor.first_name, actor.last_name, c.cnt
 from sakila.actor inner join (
  select actor_id, count(*) as cnt from sakila.film_actor group by
  actor_id
 ) as c using(actor_id);
 

执行方案:

\3.PNG\3.PNG \4.PNG\4.PNG

改写后,虽然也存在200行的表扫描,但是已经没有使用临时表,减少了IO,响应的也提高了效率

limit查询优化

limit常用于分页处理,时常会伴随order by从句使用,因此大多时候会使用filesorts,这样会造成大量的IO问题

案例:select film_id, description from sakila.film order by title limit 50, 5;

执行分析:

\5.PNG\5.PNG

优化步骤1:使用有索引的列或主键进行order by操作

select film_id, description from sakila.film order by film_id limit 50, 5;

执行分析:

\6.PNG\6.PNG

优化步骤2:记录上次返回的主键,在下次查询时使用主键范围过滤

select film_id, description from sakila.film where film_id > 600 and film_id <= 605 order by film_id limit 50, 5;

执行分析:

\7.PNG\7.PNG

这样,每次扫描的行数都固定为5列。但是这样子对于一些主键不是连续的就会存在一些问题,为解决这个问题,可以建一列辅助列保证其实自增的即可。


参考网站:

相关文章

  • face19 mysql查询优化

    mysql查询优化 sql语句优化的一些方法 先说明如何定位低效sql语句,然后根据低效原因做排查,先从索引着手,...

  • MySQL Explain

    mysql执行计划 在日常工作中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句...

  • MySql性能调优三(explain/desc执行计划)

    前言 explian/desc可以帮助我们分析sql语句,写出高效sql语句,让mysql查询优化器可以更好的工作...

  • MYSQL优化 Analyze Table

    Analyze Table(分析表) MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集...

  • 7 Explain详解

    使用Explain关键字可以模拟优化器执行SQL查询语句,从而指导MySQL是如何处理SQL语句的.分析查询语句或...

  • mysql执行计划

    mysql执行计划 ​ 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行...

  • mysql执行计划

    mysql执行计划 ​ 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行...

  • mysql执行计划

    mysql执行计划 ​ 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行...

  • mysql explain详解

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。可以分析SQL...

  • 深入理解MySql的Explain

    explain关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句...

网友评论

      本文标题:MySql SQL语句优化

      本文链接:https://www.haomeiwen.com/subject/mcdqnttx.html