SQL语句优化
SELECT语句优化
除了select语句,对查询的调整技术还可以应用于:create table…as select, insert into…select, delete子句里的where子句。
NDB 存储引擎也叫NDB Cluster 存储引擎,主要用于MySQLCluster 分布式集群环境,Cluster 是MySQL 从5.0 版本才开始提供的新功能。该存储引擎对join的优化?
优化查询需考虑的主要因素:
1、 检查是否可以增加索引。为了避免浪费磁盘空间,可以使用复合索引。
2、 函数调用会消耗大量时间。取决于查询方式,结果集的每一行都会调用函数,或表中的每一行会调用函数。
3、 最小化全表扫描的查询数量。
4、 为了让优化器有足够的信息构建执行计划,定期使用ANALYSE TABLE更新表统计信息。
5、 对于不同的存储引擎,使用不同的优化方式。
6、 优化只读的InnoDB表。待确认。
7、 避免难以理解的查询转换,特别是优化器可以自动做相似的转换。
8、 如果查询性能不能通过基本的指导路线解决,使用EXPLAIN分析执行计划,调整索引,where子句,join子句。
9、 调整配置文件中的缓存大小。
10、考虑锁。
1、 where子句
1)避免不必要的括弧
((a AND b) AND c OR(((a AND b) AND (c AND d))))
-> (a AND b AND c) OR (a ANDb AND c AND d)
2)常量折叠
(a<b and b= c) and a=5
-> b>5 and b=c and a=5
3)删除常量条件
(b>5 and b=5) or (b=6 and 5=5) or (b=7 and 5=6)
-> b=5 or b=6
4)对存储引擎为MyISAM或MEMORY的表,只涉及一个表时count(*)直接返回结果
5)检测是否有值为false的常量表达式
6)如果没有使用group by或聚集函数(count, min),having合并到where里