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

2008-02-23 07:38:44来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  当您提交一个查询的时候,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,因为这样做开销更小。

  您能够通过下面一个指导帮助优化器更好地利用索引:

  尽量比较数据类型相同的数据列。当您在比较操作中使用索引数据列的时候,请使用数据类型相同的列。相同的数据类型比不同类型的性能要高一些。例如,INT和BIGINT是不同的。CHAR(10)被认为是CHAR(10)或VARCHAR(10),但是和CHAR(12)或VARCHAR(12)不同。假如您所比较的数据列的类型不同,那么能够使用ALTER TABLE来修改其中一个,使他们的类型相匹配。

共3页。 1 2 3 :

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 实现jsp页面二级下拉框联动,实时读取数据库数据

下一篇: Sql server 提示挂起问题