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

MySQL查询优化器浅析

 2008-01-18 11:06:59 来源:WEB开发网   
核心提示: 我们可以看到,WHERE子句始终为FALASE,MySQL查询优化器浅析(3),那么WHERE条件是不可能发生的,当然我们也可以讲,这样生成的查询结果也可以成为常量表,如果表Table0定义中包含:… PRIMARY KEY(column1,column2)再看下面的语法:F

我们可以看到,WHERE子句始终为FALASE,那么WHERE条件是不可能发生的。当然我们也可以讲,WHERE条件被优化掉了。

如果一个列的定义是不允许为NULL,那么:

WHERE not_null_column IS NULL

该条件是始终为false的,再看:

WHERE not_null_column IS NOT NULL

该条件是始终为true的,因此这样的表达式也是可以从条件表达式中删除的。

当然,也是有特殊情况的,比如在out join中,被定义为NOT NULL的列也可能包含NULL值。在这种情况下,IS NULL条件是被保留的。

当然优化器没有对所有的情况进行检测,因为这实在太复杂了。举个例子:

CREATE TABLE Table1(column1 CHAR(1));

SELECT * FROM Table1 WHERE column1 = 'Canada';

尽管该条件是无效条件,优化器也不会将它移除。

5 常量计算

如下表达式:

WHERE columb1 = 1 + 2

转化为:

WHERE columb1 = 3

6 常量以及常量表

常量表的定义如下:

1) 一个表只有0行或者1行数据。

2) 在WHERE子句中包含条件column = constant,并且这些列是primary key,或者这些列是UNIQUE(假设该UNIQUE同时被定义为NOT NULL)。这样生成的查询结果也可以成为常量表。

如果表Table0定义中包含:

… PRIMARY KEY(column1,column2)

再看下面的语法:

FROM Table0 … WHERE column1=5 AND column2=7 …

那么该语句返回的就是常量表。

举个更简单的情况,建设Table1定义中包含:

… unique_not_null_column INT NOT NULL UNIQUE

再看下面的语法:

FROM Table1 ... WHERE unique_not_null_column=5

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

Tags:MySQL 查询 优化

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