MySQL查询的性能优化 – 查询缓冲提高查询速度

一般我们使用SQL语句进行查询时,数据库服务器每次在收到客户端发来SQL后,都会执行这条SQL语句。但当在一定间隔内(如1分钟内),接到完 全相同的SQL语句,也同样执行他。虽然这样能确保数据的实时性,但在大多数时候,数据并不需求完全的实时,也就是说能有一定的延时。如果是这样的话,在 短时间内执行完全相同的SQL就有些得不偿失。

  幸好MySQL为我们提供了查询缓冲的功能(只能在MySQL 4.0.1及以上版本使用查询缓冲)。我们能通过查询缓冲在一定程度上提高查询性能。

  我们能通过在MySQL安装目录中的my.ini文件设置查询缓冲。设置也非常简单,只需要将query_cache_type设为1即可。在 设置了这个属性后,MySQL在执行所有SELECT语句之前,都会在他的缓冲区中查询是否在相同的SELECT语句被执行过,如果有,并且执行结果没有 过期,那么就直接取查询结果返回给客户端。但在写SQL语句时注意,MySQL的查询缓冲是区分大小写的。如下列的两条SELECT语句:

SELECT * from TABLE1
SELECT * FROM TABLE1

  上面的两条SQL语句对于查询缓冲是完全不同的SELECT。而且查询缓冲并不自动处理空格,因此,在写SQL语句时,应尽量减少空格的使用,尤其是在SQL首和尾的空格(因为,查询缓冲并不自动截取首尾空格)。

  虽然不设置查询缓冲,有时可能带来性能上的损失,但有一些SQL语句需要实时地查询数据,或并不经常使用(可能一天就执行一两次)。这样就需要 把缓冲关了。当然,这能通过设置query_cache_type的值来关闭查询缓冲,但这就将查询缓冲永久地关闭了。在MySQL 5.0中提供了一种能临时关闭查询缓冲的方法:

SELECT SQL_NO_CACHE field1, field2 FROM TABLE1

  以上的SQL语句由于使用了SQL_NO_CACHE,因此,不管这条SQL语句是否被执行过,服务器都不会在缓冲区中查找,每次都会执行他。

  我们还能将my.ini中的query_cache_type设成2,这样只有在使用了SQL_CACHE后,才使用查询缓冲。

SELECT SQL_CALHE * FROM TABLE1

如果想使用查询缓冲的话
可以在 my.ini 中修改query_cache_size 和query_cache_type

query_cache_type=1 #打开查询缓冲,为1是使用缓冲,2是除非使用SQL_CACHE才进行缓冲
query_cache_size=600000 #查询缓冲大小,根据需要调整

################
可以通过一下查看状态
mysql> SHOW STATUS LIKE ‘Qcache_hits’;

+—————+——-+
| Variable_name | Value |
+—————+——-+
| Qcache_hits | 0 | –0次
+—————+——-+
来查看命中的次数

查看数据库缓存配置情况

mysql> SHOW VARIABLES LIKE ‘%query_cache%’;
+——————————+———+
| Variable_name | Value |
+——————————+———+
| have_query_cache | YES | –查询缓存是否可用
| query_cache_limit | 1048576 | –可缓存具体查询结果的最大值
| query_cache_min_res_unit | 4096 |
| query_cache_size | 599040 | –查询缓存的大小
| query_cache_type | ON | –阻止或是支持查询缓存
| query_cache_wlock_invalidate | OFF |
+——————————+———+

来源:http://www.tbqu.com/post/30.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请启用Javascript,以完成验证!