美文网首页
where条件优化

where条件优化

作者: 特例独行的猪 | 来源:发表于2018-10-12 15:48 被阅读26次

1:移除不必要的括号(优化解析速度)

例子:((aAND b)ANDcOR(((aANDb)AND (cANDd))))

优化后的结果:(aAND bANDc )OR(aANDbANDcANDd)

解析:从OR开始拆分,得到左右两部分条件,去除括号,合并条件优化解析时间

2:合并常量

例子:(a < bANDb=c)ANDa =5

优化结果:b>5ANDb=cANDa =5

解析:因为最后一个条件中a赋值为5,常量传递的原则,在第一个条件中a也为5,所以优化后的结果b>5

3:移除常量条件:

例子:(B>=5ANDB=5)OR (B=6AND5=5)OR(B=7AND5=6)

优化结果:B=5OR B=6

解析:首先使用OR将条件分为三部分,B>=5ANDB=5  , B=6AND 5=5 , B=7AND 5=6 ,第一部分中值传递B的值为5,所以B>=5的条件只成立B=5,第二部分中,5=5是个常量条件,可以忽略,条件中只有B=6。在第三部分中,5=6是一个不成立的条件,所以B=7AND 5=6都不成立所以,整个条件都可以忽略。优化后的结果整体优化了解析速度。

4:索引使用常量表达式只评估一次

5:COUNT(*)  如果在一个表中执行COUNT(*)操作,没有WHERE条件。结果将直接从MyISAM引擎或者MENORY表中获得。 这个也适用于针对单表得非空操作

6:对于无效的常量表达式(5=6),mysql在执行计划中快速移除,并没有结果返回

7: 如果没有使用GOUP BY 或者 aggregate 函数,就使用WHERE进行条件筛选

8:对于JOIN中的每个表,可以通过WHERE进行条件过滤,将一些数据过滤,可以提升JOIN的速度

9:在查询中,所有的常量表都比其他表优先读取。满足下面条件的都为常量表:

      1:一个空的表或者表只有一行数据

      2:一个表查询的时候,使用主键或者独立索引进行条件过滤,并且条件都不为空的时候。

例子:SELECT * FROM t WHERE primary_key=1;                  SELECT * FROM t1,t2    WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

10:对于进行JOIN的表最好的组合是尝试所有的可能性。如果ORDER BY 和 GROUP BY中的列来自同一张表,那么这张表在JOIN时优先加入

11:如果使用SQL_SMALL_RESULT    ,mysql将在内存中创建一个临时表

12:如果GROUP BY和ORDER BY的字段不是从join的第一个表中得来,一个临时表就会被创建

13:在结果返回前,没有匹配到结果得HVING都将跳过

相关文章

  • where条件优化

    1:移除不必要的括号(优化解析速度) 例子:((aAND b)ANDcOR(((aANDb)AND (cANDd)...

  • hive相关

    HQL优化 1. HQL优化 一、避免or操作的不当。如果where子句中有多个条件,并且其中某个条件没有索引,使...

  • sql优化

    优化查询基础 为所有的join,where,order by和group by 中的条件简历索引 避免在条件中使用...

  • MySQL优化系列17-MySQL SQL语句优化

    备注:测试数据库版本为MySQL 8.0 一.优化select语句 1.1 where子句优化 剔除重复的条件 常...

  • 常见的sql优化

    一些常见的SQL优化 负向条件查询不能使用索引 select * from order where status...

  • MySQL优化:单索引的选择-index_merge

    1.多个单索引 where子句后有多个查询条件,MySQL 5.1以前即使分别为每个条件建立索引,查询优化器也只会...

  • 条件where

    语法: select column1, column2 from table_name where [condit...

  • where条件

    04where条件 where id = 1 or id = 2 就是操作id为1和id为2的。 同样的and是并...

  • 58-MySQL索引优化与查询优化-ORDER BY和GROUP

    一、排序优化(ORDER BY) 1、在WHERE条件字段上加索引,但是为什么在ORDER BY字段上还要加索引?...

  • MySQL 5.6 order by limit 语句优化器选择

    问题描述 bug 触发条件如下: 优化器先选择了 where 条件中字段的索引,该索引过滤性较好;SQL 中必须有...

网友评论

      本文标题:where条件优化

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