MySQL 5.0 数据库新特性的存储过程

时间:2007-10-24 19:45:00 

当你提交一个查询的时候,MySQL会分析它,看是否可以做一些优化使处理该查询的速度更快。这一部分将介绍查询优化器是如何工作的。如果你想知道MySQL采用的优化手段,可以查看MySQL参考手册。

当然,MySQL查询优化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查询,那么无论数据表有多大,MySQL执行它的速度都会非常快:

  SELECT * FROM tbl_name WHERE 0;在这个例子中,MySQL查看WHERE子句,认识到没有符合查询条件的数据行,因此根本就不考虑搜索数据表。你可以通过提供一个EXPLAIN语句看到这种情况,这个语句让MySQL显示自己执行的但实际上没有真正地执行的SELECT查询的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN单词放在SELECT语句的前面:

  mysql> EXPLAIN SELECT * FROM tbl_name WHERE 0\G 
  *************************** 
  1. row *************************** 
  id: 1 
  select_type: SIMPLE 
  table: NULL 
  type: NULL 
  possible_keys: NULL 
  key: NULL 
  key_len: NULL 
  ref: NULL 
  rows: NULL 
  Extra: Impossible WHERE 
  通常情况下,EXPLAIN返回的信息比上面的信息要多一些,还包括用于扫描数据表的索引、使用的联结类型、每张数据表中估计需要检查的数据行数量等非空(NULL)信息。

优化器是如何工作的

MySQL查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行。你的最终目标是提交SELECT语句查找数据行,而不是排除数据行。优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条件匹配的数据行也就越快。如果能够首先进行最严格的测试,查询就可以执行地更快。假设你的查询检验了两个数据列,每个列上都有索引:

SELECT col3 FROM mytable 
  WHERE col1 = ’some value’ AND col2 = ’some other value’; 


  假设col1上的测试匹配了900个数据行,col2上的测试匹配了300个数据行,而同时进行的测试只得到了30个数据行。先测试Col1会有900个数据行,需要检查它们找到其中的30个与col2中的值匹配记录,其中就有870次是失败了。先测试col2会有300个数据行,需要检查它们找到其中的30个与col1中的值匹配的记录,只有270次是失败的,因此需要的计算和磁盘I/O更少。其结果是,优化器会先测试col2,因为这样做开销更小。

标签:优化器,mysql,数据库
0
投稿

猜你喜欢

  • 如何判断js脚本加载完成

    2008-11-04 13:53:00
  • ASP开发10条经验总结

    2007-09-30 13:36:00
  • 用ASP显示ACCESS数据库的GIF图象

    2008-11-16 18:09:00
  • MySQL安全性指南 (2)

    2010-07-26 13:26:00
  • asp如何实现强制登录注册?

    2010-05-24 18:13:00
  • 类型转换的小乐趣

    2010-11-30 21:37:00
  • ASP使用FSO组件生成HTML静态页面

    2007-10-15 12:19:00
  • Windows mysql命令行导入 .sql文件

    2010-12-03 16:12:00
  • XML轻松学习手册(3)XML的术语

    2008-09-05 17:17:00
  • delete from online where datediff

    2009-06-07 18:46:00
  • asp如何让浏览器在https和http之间转化?

    2010-05-13 16:37:00
  • 你是一个职业的页面重构工作者吗?

    2008-09-29 12:07:00
  • 让IE6更快的走向灭亡

    2010-02-03 15:05:00
  • 自己重新写了一个JavaScript的对象克隆函数

    2008-08-03 16:47:00
  • asp在sql server2000中新建帐号和给帐号权限代码

    2008-01-29 13:46:00
  • Mootools 1.2教程(18)——Class 类(第一部分)

    2008-12-19 12:45:00
  • 两行代码实现的QQ窗口抖动效果

    2008-09-06 12:34:00
  • 交互设计实用指南系列(3)—“有效性”之“适时帮助”

    2009-12-25 14:29:00
  • 客齐集社区头像显示效果代码

    2008-04-03 13:15:00
  • 对用户研究实践的思考

    2010-10-19 12:21:00
  • asp之家 网络编程 m.aspxhome.com