当前位置: 首页 > 图文教程 > 网络编程 > PHP > MySQL手册版本 5.0.20-MySQL优化(二) (1)(2)

PHP
一键删除顽固的空文件夹 软件下载
获得Google PR值的PHP代码
解决控件遮挡问题:关于有窗口元素和无窗口元素
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
一个数据采集类
php中的一个中文字符串截取函数
自己前几天写的无限分类类
简单采集了yahoo的一些数据
回答PHPCHINA上的几个问题:URL映射
模拟flock实现文件锁定
一个捕获函数输出的函数
cache_lite试用
再次研究下cache_lite
PHP数据缓存技术
修改了一个很不错的验证码,共享之。
谈谈PHP的输入输出流
使用apache模块rewrite_module (转)
让PHP支持页面回退的两种方法[转]
mysql中存储过程、函数的一些问题

PHP 中的 MySQL手册版本 5.0.20-MySQL优化(二) (1)(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 109 ::
收藏到网摘: n/a

表中最多只有一行匹配的记录,它在查询一开始的时候就会被读取出来。由于只有一行记录,在余下的优化程序里该行记录的字段值可以被当作是一个恒定值。const 表查询起来非常快,因为只要读取一次!const 用于在和 PRIMARY KEY 或 UNIQUE 索引中有固定值比较的情形。下面的几个查询中,tbl_name 就是 const 表了:

SELECT * FROM tbl_name WHERE primary_key=1;

SELECT * FROM tbl_name

WHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref

从该表中会有一行记录被读取出来以和从前一个表中读取出来的记录做联合。与 const 类型不同的是,这是最好的连接类型。它用在索引所有部分都用于做连接并且这个索引是一个 PRIMARY KEY 或 UNIQUE 类型。eq_ref 可以用于在进行"="做比较时检索字段。比较的值可以是固定值或者是表达式,表达示中可以使用表里的字段,它们在读表之前已经准备好了。以下的几个例子中,MySQL使用了 eq_ref 连接来处理 ref_table:

SELECT * FROM ref_table,other_table

WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table

WHERE ref_table.key_column_part1=other_table.column

AND ref_table.key_column_part2=1;

ref

该表中所有符合检索值的记录都会被取出来和从上一个表中取出来的记录作联合。ref 用于连接程序使用键的最左前缀或者是该键不是 PRIMARY KEY 或 UNIQUE 索引(换句话说,就是连接程序无法根据键值只取得一条记录)的情况。当根据键值只查询到少数几条匹配的记录时,这就是一个不错的连接类型。ref 还可以用于检索字段使用 = 操作符来比较的时候。以下的几个例子中,MySQL将使用 ref 来处理 ref_table:

SELECT * FROM ref_table WHERE key_column=expr;

SELECT * FROM ref_table,other_table

WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table

WHERE ref_table.key_column_part1=other_table.column

AND ref_table.key_column_part2=1;

ref_or_null

这种连接类型类似 ref,不同的是MySQL会在检索的时候额外的搜索包含 NULL 值的记录。这种连接类型的优化是从MySQL 4.1.1开始的,它经常用于子查询。在以下的例子中,MySQL使用 ref_or_null 类型来处理 ref_table:

SELECT * FROM ref_table

WHERE key_column=expr OR key_column IS NULL;

详情请看"7.2.6 How MySQL Optimizes IS NULL"。

index_merge

这种连接类型意味着使用了 Index Merge 优化方法。这种情况下,key字段包括了所有使用的索引,key_len 包括了使用的键的最长部分。详情请看"7.2.5 How MySQL Optimizes OR Clauses"。

unique_subquery

这种类型用例如一下形式的 IN 子查询来替换 ref:

value IN (SELECT primary_key FROM single_table WHERE some_expr)

unique_subquery 只是用来完全替换子查询的索引查找函数效率更高了。

index_subquery

这种连接类型类似 unique_subquery。它用子查询来代替 IN,不过它用于在子查询中没有唯一索引的情况下,例如以下形式:

value IN (SELECT key_column FROM single_table WHERE some_expr)

range

只有在给定范围的记录才会被取出来,利用索引来取得一条记录。key