MySQL 5.0 数据库新特性的存储过程
2008-02-23 07:38:44来源:互联网 阅读 ()
当您提交一个查询的时候,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来修改其中一个,使他们的类型相匹配。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: Sql server 提示挂起问题
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash