小文一个数据库新鸟,但脾气比较急?今天有程序员问他新上的业务有没有不好的SQL 语句, 小文没好气的说,怎么看,你们自己写的,问我?
程序员也没好气的回怼 ? 我算是问错人了,估计你也不会看COST ,优化问你算是白瞎了。
到底怎么能快速应付程序员的 ASKING 并且还能技高一筹的回怼他。Follow me.
基本每种数据库,在执行语句前都会评估执行语句的执行计划的 cost ,通过cost 来判断到底目前哪个 prepare plan 更好更快更强?
大致画了一个图
首先数据库的获知, 1 操作的成本 , 2 是否有替换的方案 3 在众多的方案中找到“最低”的执行计划
上边的查询会包含几个 点 1 JOIN 的次序, 2 访问的方法 3 子查询
那到底怎么评判那个 JOIN 的次序好,方法秒,子查询怎么查,MYSQL 基于 CPU I/O 两个量来进行计算和最重的判断哪个COST 最低.
那下面问题来了,到底我怎么知道我要访问的表的cost是多少,有没有索引,索引里面怎么设置的。
那就引出 METADATA 数据库表状态, 其中包含了 row ,index 的SIZE, index 的信息, 是否是唯一的索引, 表的大小, 范围的评估 ,基数等等信息,(今天不谈统计信息)
STOP STOP 你巴拉巴拉说了这么多,对我有什么帮助? 小文愤怒到,你就告诉我怎么优化 那个什么鬼 语句?
好的我们先打开 OPTIMIZER_TRACE 功能 (小文:我不知道
MYSQL OPTIMIZER_TRACE),不知道的follow me.</