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

MySQL查询优化器浅析

 2008-01-18 11:06:59 来源:WEB开发网   
核心提示: 2) 否则,如果其中一个列拥有更好的存取类型(比如,MySQL查询优化器浅析(7),一个具有索引,另外一个没有索引;再或者,每个查询都是使用索引查询,然后合并结果集,一个是唯一索引,另外一个是非唯一索引)

2) 否则,如果其中一个列拥有更好的存取类型(比如,一个具有索引,另外一个没有索引;再或者,一个是唯一索引,另外一个是非唯一索引),那么使用该列作为驱动表达式。

3) 否则,如果两个列都分别拥有索引,并且两个条件对应的存取类型是一致的,那么选择定义索引时的先定义的索引。

举例如下:

CREATE TABLE Table1 (s1 INT,s2 INT);

CREATE INDEX Index1 ON Table1(s2);

CREATE INDEX Index2 ON Table1(s1);

SELECT * FROM Table1 WHERE s1=5 AND s2=5;

优化器选择s2=5作为驱动表达式,因为s2上的索引是新建的。

12 OR

带OR的查询格式为: OR ,考虑如下的查询语句:

WHERE column1='x' OR column2='y'

优化器做出的选择是采用全表扫描。

当然,在一些特定的情况,可以使用索引合并,这里不做阐述。

如果两个条件里面设计的列是同一列,那么又是另外一种情况,考虑如下的查询语句:

WHERE column1='x' OR column1='y'

在这种情况下,该查询语句采用索引范围查找。

13 UNION

所有带UNION的查询语句都是单独优化的,考虑如下的查询语句:

以下是引用片段:
  SELECT*FROMTable1WHEREcolumn1='x'
  UNIONALL
  SELECT*FROMTable1WHEREcolumn2='y'

如果column1与column2都是拥有索引的,每个查询都是使用索引查询,然后合并结果集。

14 NOT,<>

考虑如下的表达式:

Column1<> 5

从逻辑上讲,该表达式等价于下面的表达式:

Column1<5 OR column1>5

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

Tags:MySQL 查询 优化

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