WEB开发网
开发学院数据库MySQL MySQL查询优化器浅析 阅读

MySQL查询优化器浅析

 2008-01-18 11:06:59 来源:WEB开发网   
核心提示: 该语句返回的也是常量表,从例子中我们可以看出常量表最多只有1个行值,MySQL查询优化器浅析(4),MySQL会预先评估常量表,找出这个值,按照从最优到最差的顺序进行排列:system … 系统表,并且是常量表const … 常量表eq_ref …

该语句返回的也是常量表。

从例子中我们可以看出常量表最多只有1个行值。MySQL会预先评估常量表,找出这个值,然后将这个值引入到查询语句中进行优化,举例如下:

SELECT Table1.unique_not_null_column, Table2.any_column

FROM Table1, Table2

WHERE Table1.unique_not_null_column = Table2.any_column

AND Table1.unique_not_null_column = 5;

在评估这个查询语句时,MySQL首先发现通过Table1.unique_not_null_column条件的限制,Table1会变成一个常量表。然后,取回该值。

如果取回操作失败(Table1中没有行满足条件unique_not_null_column = 5),那么该常量表就包含0行,那么如果对该语句执行EXPLAIN操作,会得到提示信息:

Impossible WHERE noticed after reading const tables

另外一种情况是取回操作成功(Table1中严格只有一行满足条件unique_not_null_column = 5),那么常量表中包含一条数据,并且MySQL会将查询语句转化为:

SELECT 5, Table2.any_column

FROM Table1, Table2

WHERE 5 = Table2.any_column

AND 5 = 5;

实际上,这个例子是个复杂的例子,这里面也用到了上文所说的常量转化。  

7 存取类型

当我们评估一个条件表达式,MySQL判断该表达式的存取类型。下面是一些存取类型,按照从最优到最差的顺序进行排列:

system … 系统表,并且是常量表

const … 常量表

eq_ref … unique/primary索引,并且使用的是'='进行存取

ref … 索引使用'='进行存取

ref_or_null … 索引使用'='进行存取,并且有可能为NULL

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MySQL 查询 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接