优化MySQL数据库查询的三种方法

  任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响。

  如同其它学科,优化查询性能很大程度上决定于开发者的直觉。幸运的是,像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。

  一、使用索引

  MySQL允许对数据库表进行索引,以此能迅速查找记录,而无需一开始就扫描整个表,由此显著地加快查询速度。每个表最多可以做到16个索引,此外MySQL还支持多列索引及全文检索。

  给表添加一个索引非常简单,只需调用一个CREATE INDEX命令并为索引指定它的域即可。

  这里,对users表的username域做索引,以确保在WHERE或者HAVING子句中引用这一域的SELECT查询语句运行速度比没有添加索引时要快。

  值得注意的是:索引就像一把双刃剑。对表的每一域做索引通常没有必要,且很可能导致运行速度减慢,因为向表中插入或修改数据时,MySQL不得不每次都为这些额外的工作重新建立索引。另一方面,避免对表的每一域做索引同样不是一个非常好的主意,因为在提高插入记录的速度时,导致查询操作的速度减慢。这就需要找到一个平衡点,比如在设计索引系统时,考虑表的主要功能(数据修复及编辑)不失为一种明智的选择。

  二、优化查询性能

  在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。

  三、调整内部变量

  MySQL是如此的开放,所以可轻松地进一步调整其缺省设置以获得更优的性能及稳定性。需要优化的一些关键变量如下:

  改变索引缓冲区长度(key_buffer)

  一般,该变量控制缓冲区的长度在处理索引表(读/写操作)时使用。MySQL使用手册指出该变量可以不断增加以确保索引表的最佳性能,并推荐使用与系统内存25%的大小作为该变量的值。这是MySQL十分重要的配置变量之一,如果你对优化和提高系统性能有兴趣,可以从改变key_buffer_size变量的值开始。

  改变表长(read_buffer_size)

  当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

  设定打开表的数目的最大值(table_cache)

  该变量控制MySQL在任何时候打开表的最大数目,由此能控制服务器响应输入请求的能力。它跟max_connections变量密切相关,增加table_cache值可使MySQL打开更多的表,就如增加max_connections值可增加连接数一样。当收到大量不同数据库及表的请求时,可以考虑改变这一值的大小。

  对缓长查询设定一个时间限制(long_query_time)

  MySQL带有“慢查询日志”,它会自动地记录所有的在一个特定的时间范围内尚未结束的查询。这个日志对于跟踪那些低效率或者行为不端的查询以及寻找优化对象都非常有用。long_query_time变量控制这一最大时间限定,以秒为单位。

  以上讨论并给出用于分析和优化SQL查询的三种工具的使用方法,以此提高你的应用程序性能。

时间: 2024-12-22 04:22:53

优化MySQL数据库查询的三种方法的相关文章

优化MySQL数据库查询的三种方法简介

在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响. 如同其它学科,优化查询性能很大程度上决定于开发者的直觉.幸运的是,像MySQL这样的数据库自带有一些协助工具.本文简要讨论诸多工具之三种:使用索引,使用E

mysql select查询区分大小写三种方法(1/3)

1.一种方法是可以设置表或行的collation,使其为binary或case sensitive.在mysql教程中,对于column collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,不区分大小写   ########### # start binary c

优化MySQL数据库性能的八种方法

1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段. 另外一个提高效率的方法是

优化MySQL数据库查询

优化MySQL数据库查询 最简单且最安全的格式,它是磁盘格式中最快的.速度来自于数据能在磁盘上被找到的难易程度.当锁定有一个索引和静态格式的东西是,它很简单,只是行长度乘以数量.而且在扫描一张表时,每次用磁盘读取来读入常数个记录是很容易的.安全性来源于如果当写入一个静态myisam文件时导致计算机down掉,myisamchk很容易指出每行在哪里开始和结束,因此,它通常能收回所有记录,除了部分被写入的记录.在mysql中所有索引总能被重建 1.2动态myisam 这种格式每一行必须有一个头说明它

Mysql数据库备份的几种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 数据备份是一个网站能够正常运营的保障,数据备份包括网站源码备份和数据库备份,如果你使用的是ACCESS数据库,那么直接使用FTP下载数据库文件就可以了,但如果你使用了PHP+MYSQL进行网站建设,数据库备份就没有那么容易了.下面介绍几种mysql数据库备份的方法. 方法一:如果你使用的是虚拟主机,可以用使用phpmyadmin来备份数据库.

PHP直接读取数据库信息的三种方法

这段代码的功能是: 连接到一个 url 地址为localhost . 端口为 3306 的mysql服务器上. 这段代码的功能是: 连接到一个 url 地址为localhost . 端口为 3306 的mysql服务器上.mysql服务器的帐号是"root",密码是"9999".mysql 服务器上有一个数据库 ok , 数据库里有一个表 abc.表 abc 一共为两列,列名分别是 "id" 和 "name" ,将 abc 里

直接读取数据库信息的三种方法

这段代码的功能是: 连接到一个 url 地址为localhost .端口为 3306 的mysql服务器上.mysql服务器的帐号是"root",密码是"9999".mysql 服务器上有一个数据库 ok , 数据库里有一个表 abc.表 abc 一共为两列,列名分别是 "id" 和 "name" ,将 abc 里的所有数据读出来. 以下为引用的内容: <? $dbh = @mysql_connect("loc

解决MYSQL中文乱码问题三种方法

方法三 1>本文将消除乱码分为三步:          >消除页面乱码,          >消除从mysql教程中读出中文乱码,          >消除插入mysql数据库教程中的中文乱码: 15>注意编码表示方式在网页特效p/jsp.html target=_blank >jsp教程与mysql中的区别,如下:       jsp: gb2312, gbk, utf-8....       mysql: gb2312, gbk, utf8.... 关键问题:编码,

从设备配置上优化数据中心能耗的三种方法

数据中心能源消耗的优化有几种方法,其中之一就是通过优化操作设备的参数来实现.例如,可以动态优化冷冻水设置参数. 一.冷水机组设置更高的温度可能更节能 冷水机组的冷冻水设定值不能设置太低,如果用户通过一个固定的设定值来优化数据中心能效,这可能会起到反作用.例如,将冷冻水的温度固定在7℃,而在一年90%的时间里,其设定温度过低,另外的10%的时间里,其设定的温度则有些过高. 因此,通过监控所有信息数据,并将其捆绑在一起,才可以优化设定值,特别是可以提高设定点,并使系统尽可能多地采用自然冷却,这样就能