TechTarget中国网站推荐

MySQL Explain详解(五)

2008-8-19  选择字号:  | |
打印本文章

  例如:

mysql> drop index idx_t3_id on t3; 
  Query OK, 1000 rows affected (0.03 sec) 
  Records: 1000 Duplicates: 0 Warnings: 0 
  mysql> create index idx_t3_id on t3(id) ; 
  Query OK, 1000 rows affected (0.04 sec) 
  Records: 1000 Duplicates: 0 Warnings: 0 
  mysql> explain select * from t3,t4 where t3.id=t4.accountid; 
  +----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+ 
  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  +----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+ 
  | 1 | SIMPLE | t4 | ALL | NULL | NULL | NULL | NULL | 1000 | | 
  | 1 | SIMPLE | t3 | ref | PRIMARY,idx_t3_id | idx_t3_id | 4 | dbatest.t4.accountid | 1 | | 
  +----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+ 
  2 rows in set (0.00 sec) 

  (5). ref_or_null

  该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

  在下面的例子中,MySQL可以使用ref_or_null联接来处理ref_tables:


select * FROM ref_table 
where key_column=expr OR key_column IS NULL;
 


  (6). index_merge

  该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。

  例如:

mysql> explain select * from t4 where id=3952602 or accountid=31754306 ; 
  +----+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+ 
  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  +----+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+ 
  | 1 | SIMPLE | t4 | index_merge | idx_t4_id,idx_t4_accountid | idx_t4_id,idx_t4_accountid | 4,4 | NULL | 2 | Using union(idx_t4_id,idx_t4_accountid); Using where | 
  +----+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+ 
  1 row in set (0.00 sec) 

  (7). unique_subquery

  该类型替换了下面形式的IN子查询的ref:


value IN (select primary_key FROM single_table where some_expr) 

  unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。


MySQL Explain 详解
 MySQL Explain详解(一)
 MySQL Explain详解(二)
 MySQL Explain详解(三)
 MySQL Explain详解(四)
 MySQL Explain详解(五)
 MySQL Explain详解(六)

原文出处:http://space.itpub.net/7364032/viewspace-421320
来源:BLOG    作者:yxyup    
相关的专家答疑
MYSQL是一种小型的,紧密的数据服务器,支持标准SQL。它在UNIX和WINDOWS环境下都能够使用。
MySQLDriverCS是MySQL数据库的一个免费开源的.NET驱动程序。和Sql .NET Data Provider是为Sql Server一样,它是专门为MySQL设计的,可以叫做MySQL .NET Data Provider。
如何在.NET中访问MySQL数据库呢?也许很多人马上会说:用OLEDB嘛,但是事实上采用.NET OleDb Data Provider并不能访问MySQL,如果你使用的话,系统就会提示你……
单一文件大小有如下几个因素:1、文件系统的限制;2、某一程序进程所能存取的第一文件最大尺寸(例如apache在Linux EXT3下能存取的最大尺寸为2G,诸如日志)……
在论坛发表回复时出现“The table is full”的提示,字面意义上是数据表已满的意思。本文将以我此次问题的解决过程,介绍问题发生的原因及对策。
本篇文章主要介绍SQL Server数据存储的物理对象和原理,包括SQL Server 2005和2008里的物理数据存储、SQL Server 2008数据类型(即Datetime、字符串、自定义及等)、在SQL Server数据库中加强数据的完整性……
本文为SQL Server 2008初学者指南,主要介绍SQL Server2008 T-SQL支持的基本元素和基本操作。
本篇技术专题主要内容包括SQL Server整合、SQL Server数据库设计灾难、SQL Server数据库查询设计以及SQL Server数据库同步、复制、报告显示。
最新更新
专家答疑
技巧
Brian Peasland
我在使用这个工具的时候就出现了以上的错误。由于出现了这个错误,我就没有顺利地完成备份。你能告诉我是什么原因吗?
Rudy Limeback
我有一个有关用综合连接语句在不同范畴获取行数的问题……,该查询返回有行的三个stratum/treatment组合,但是没有返回没有行的一个组合。我尝试用对该值用……
Maria Anderson
我得到了一个错误信息,如“DIM-00019:创建服务错误。”我用你寄给我的解决方案解决这一问题,即:“手动创建和启动服务。”你能告诉我如何手动安装该服务吗?