part 1 sql执行流程(如下图所示)
1、客户端发送一条查询到服务器。
2、服务器通过权限检查后,先检查查询缓存,命中则直接返回结果。否则进入3。
3、服务器进行sql解析,预处理,再由优化器根据该sql涉及到的数据表的信息计算,生成执行计划。
4.、MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
5.、将结果返回给客户端。
总结:SQL执行的最大瓶颈在于磁盘的IO,即数据的读取;不同SQL的写法,会造成不同的执行计划的执行,而不同的执行计划在IO的上面临完全不一样的数量级,从而造成性能的差距;优化SQL,其实就是让查询优化器根据你所希望的执行过程来选择匹配的执行计划,减少查询中产生的IO
part 2 表结构(schema)对性能的影响
1、数据库三范式,适当设置冗余数据
1NF:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,不满足第一范式的数据库不是关系型数据库。
2NF:数据库表中的每个实例或行必须可以被惟一地区分。
3NF:数据库表中只包含其它表中的主关键字信息。 (不允许有冗余数据)
2、大表拆小表,有大数据的列单独拆成小表
3、把常用属性分离成小表 ,这样可以减少查询常用属性需要查询的列,便于常用属性的集中缓存
mysql优化之sql执行流程及表结构(schema)对性能的影响
原文:https://www.cnblogs.com/hungryforknowedge/p/10023381.html