Mysql性能优化

51 阅读1分钟

文章来源: dev.mysql.com/doc/refman/…

Mysql性能优化有三个思路:

  1. 在数据库级别进行优化
  2. 在硬件级别进行优化
  3. 性能和便捷性的平衡 在mysql程序中使用面向性能的SQL扩展

WHERE子句优化

  • 删除不必要的括号:
((a AND b) AND c OR (((a AND b) AND (c AND d)))) -> (a AND b AND c) OR (a AND b AND c AND d)
  • 常量值合并:
(a<b AND b=c) AND a=5 -> b>5 AND b=c AND a=5
  • 恒定值删除
(b>=5 AND b=5) OR (b=6 AND 5=5) OR (b=7 AND 5=6) -> b=5 OR b=6
  • 索引使用的常量表达式仅计算一次
  • 将检查数字类型列与常量值的比较,并折叠或删除无效或超出范围的值
# CREATE TABLE t (c TINYINT UNSIGNED NOT NULL); SELECT * FROM t WHERE c < 256; -SELECT * FROM t WHERE 1;
  • 及早检测无效常量表达式。 MySQL 很快检测到某些 SELECT语句是不可能的并且不返回任何行。
  • HAVING``WHERE如果您不使用GROUP BY或聚合函数(COUNT()、 MIN()等),则 与 合并 。
  • 每个表, WHERE构建一个更简单的方法来快速 WHERE评估表并尽快跳过行。
  • 在查询中,首先读取所有常量表,然后再读取任何其他表。常量表是以下任意一种: 1.一张空表或一张只有一行的表。
    2.WHERE 与索引PRIMARY KEY或 索引上的子句 一起使用的表UNIQUE,其中所有索引部分都与常量表达式进行比较并定义为NOT NULL.