sql创建存储过程 MySQL 5.0 数据库新特性的存储过程
MySQL 5.0 数据库新特性的存储过程
当你提交一个查询的时候 MySQL会分析它 看是否可以做一些优化使处理该查询的速度更快 这一部分将介绍查询优化器是如何工作的 如果你想知道MySQL采用的优化手段 可以查看MySQL参考手册
当然 MySQL查询优化器也利用了索引 但是它也使用了其它一些信息 例如 如果你提交如下所示的查询 那么无论数据表有多大 MySQL执行它的速度都会非常快
SELECT * FROM tbl_name WHERE ;
在这个例子中 MySQL查看WHERE子句 认识到没有符合查询条件的数据行 因此根本就不考虑搜索数据表 你可以通过提供一个EXPLAIN语句看到这种情况 这个语句让MySQL显示自己执行的但实际上没有真正地执行的SELECT查询的一些信息 如果要使用EXPLAIN 只需要在EXPLAIN单词放在SELECT语句的前面
mysql> EXPLAIN SELECT * FROM tbl_name WHERE G *************************** row *************************** id: 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 col FROM mytable WHERE col = some value AND col = some other value ;
lishixinzhi/Article/program/MySQL/201311/29623