MySQL查询优化程序

转载 2006年06月04日 17:49:00

1.EXPLAIN SELECT * FROM tb1_name WHERE 1= 0可以查看到执行的信息

1 比较具有相同类型的列。在比较中利用索引列时,应该使用那些类型相同的列。例如,CHAR(10) 被视为与CHAR(10) 或VARCHAR(10) 相同,但不同于CHAR(12) 和VARCHAR( 12 )。INT 与BIGINT 不同。在MySQL3.23 版以前,要求使用相同类型的列,否则列上的索引将不起作用。自3.23 版后,不严格要求这样做,但相同的列类型比不同类型提供更好的性能。如果所比较的两列类型不同,可使用ALTER TABLE语句修改其中之一使它们的类型相配。

2  比较中应尽量使索引列独立。如果在函数调用或算术表达式中使用一个列,则MySQL不能使用这样的索引,因为它必须对每行计算表达式的值。有时,这是不可避免的,但很多时候,可以重新编写只取索引列本身的查询。下面的WHERE 子句说明了怎样进行这项工作。第一行中,优化程序将简化表达式4/2 为值2,然后使用my_col 上的索引快速地找到小于2 的值。而在第二个表达式中,MySQL必须检索出每行的my_col 值,乘以2,然后将结果与4 比较。没索引可用,因为列中的每个值都要检索,以便能对左边的表达式求值:

  WHERE my_col < 4/2

  WHERE my_col * 2 < 4

  让我们考虑另一个例子。假如有一个索引列date _ c o l。如果发布如下的查询,相应的索引未被使用:

  SELECT * FROM my_tb1WHERE YEAR(date_col) < 1990

其中表达式并不将索引列与1990 比较,而是将从列值计算出的值用于比较,而且必须计算每行的这个值。结果是, date_col 上的索引不可能得到使用。怎样解决?使用一个文字日期即可,这时将会使用date_col 上的索引:

  WHERE date_col < "1990-01-01"

但是假如没有特定的日期值,那么可能会对找到具有出现在距今一定天数内的日期的记录感兴趣。有几种方法来编写这样的查询,但并非所有方法都很好。三种可能的方法如下:



其中第一行不能利用索引, 因为必须为每行检索列, 以便能够计算TO _ DAYS(date_col) 的值。第二行要好一些。c ut o ff 和TO _ DAY S ( CURRENT _ DATE) 两者都是常量,因此比较表达式的右边可在查询处理前由优化程序一次计算出来,而不是每行计算一次。但date_col 列仍然出现在一个函数调用中,因此,没有使用索引。第三行是最好的方法。比较表达式的右边可在执行查询前作为常量一次计算出来,但现在其值是一个日期。这个值可直接与date_col 的值进行比较,不再需要转换为天数,可以利用索引。

■ 在LIKE 模式的起始处不要使用通配符。有时,有的人会用下列形式的WHERE 子句来搜索串:

  WHERE col_name LIKE "%string%"

如果希望找到s t r i n g,不管它出现在列中任何位置,那么这样做是对的。但不要出于习惯在串的两边加“ %”。如果实际要查找的只是出现在列的开始处的串,则不应该要第一个“%”号。例如,如果在一个包含姓的列中查找“ M a c”起始的姓,应该编写如下的WHERE 子句:

  WHERE last_name LIKE "Mac%"

优化程序考虑模式中的开始的文字部分,然后利用索引找到相符合的行。不过宁可写成如下的表达式,它允许使用last_name 上的索引:

  WHERE last_name >= "Mac" AND last_name < "Mad"

这种优化对使用REGEXP 操作符的模式匹配不起作用。

MySQL教程之查询优化程序

MySQL查询优化程序当你调用语句时,MySQL会对它进行分析,判断出可以使用哪些优化操作来加快处理速度。例如select * from tab where false; Mysql会检查子句,发现没...

对应用程序角度的MySQL查询优化的一点个人小结

开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优 化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发...
  • wowqi
  • wowqi
  • 2016年09月07日 17:11
  • 120

mysql.rar 安装程序-查询分析器

  • 2009年09月02日 09:51
  • 10.25MB
  • 下载

mybatis查询MySQL表的初级小程序

1.创建web工程 2.加入相关Jar包 Jar位置 3.新建MySQL表 items表 我们查询这张表 4.用mybatis的逆向工程生成表对应的Java和xml文件 5.在myb...

开源php+mysql防伪查询程序

  • 2016年01月22日 18:31
  • 1.33MB
  • 下载

intelliJ IDEA for mac 的Mysql数据库编程的JDBC配置问题及初级程序遇到的问题

Mac下搭建数据库编程的环境着实需要下一点功夫,本篇文章适用于 1.安装好intelliJ IDEA 2.配置好相关JDK 3.能运行java程序 4.安装了MySQLl并能成功连接上MySQL而且能...

MySQL查询优化器的工作原理

  • 2015年01月20日 14:25
  • 1.59MB
  • 下载

MySQL查询优化的研究和改进

  • 2014年01月08日 12:25
  • 278KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL查询优化程序
举报原因:
原因补充:

(最多只允许输入30个字)