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

PHP
PHP实时显示输出
php生成缩略图的类代码
php相当简单的分页类
smarty section简介与用法分析
php优化及高效提速问题的实现方法
php下实现在指定目录搜索指定类型文件的函数
PHP base64+gzinflate压缩编码和解码代码
脚本安全的本质_PHP+MYSQL
使用eAccelerator加密PHP程序
PHP注释实例技巧
php 友好URL的实现(吐血推荐)
关于DISCUZ不用通行证登陆得内容介绍
不用mod_rewrite直接用php实现伪静态化页面代码
Cannot modify header information错误解决方法
php获取地址栏信息的代码
php email邮箱正则
php preg_match_all结合str_replace替换内容中所有img
PHP中str_replace函数使用小结
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
php flush类输出缓冲剖析

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 84 ::
收藏到网摘: 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