如何在查询时提高mysql中的缓存使用率

时间:2014-04-06 01:25:53

标签: mysql performance caching

当我使用查询提高效率时如下:

 select retweet_id from mysqlQ3 where user_id ='99963947’;

当我用Google搜索时,我发现我可以更改以下参数:

query_cache_type=2
query_cache_limit=1M
query_cache_size=32M

但我很好奇当我将query_cache_type从1更改为2时,它甚至会对吞吐量产生不良影响。发生了什么?任何人都可以指定如何提高上述特定查询的mysql性能?

非常感谢你!

3 个答案:

答案 0 :(得分:0)

我会使用user_id列的索引,来自手册(https://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html):

  

MySQL使用索引进行这些操作:

     
      
  • 快速查找与WHERE子句匹配的行。
  •   

答案 1 :(得分:0)

  

但我很好奇当我将query_cache_type从1更改为2时,它甚至会对吞吐量产生不良影响。发生了什么事?

我认为您的答案实际上是在MySQL文档中: https://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html

  • 值为0或OFF可防止缓存或检索缓存结果。
  • 值为1或ON启用缓存,但以SELECT SQL_NO_CACHE开头的语句除外。
  • 值为2或DEMAND会导致仅缓存以SELECT SQL_CACHE开头的那些语句。

因此,值2对缓存的内容比值1更具限制性,并且只有在调用者明确请求时才会触及缓存,否则将不会缓存。

答案 2 :(得分:0)

你有id的INDEX吗?可能你有PRIMARY KEY(id),这甚至更好。在这种情况下,不要打扰查询缓存。

你对该表有很多写吗?每次发生写入时, 表的QC中的所有条目都将被清除。这意味着扫描32M以查找该表的任何条目。扫描成本很高,而且您在QC中没有任何类似的查询。

返回被编入索引的id ...对于MyISAM表,key_buffer_size应调整为可用内存的20%。对于InnoDB表,innodb_buffer_pool_size应该是可用RAM的70%左右。这些是引擎特定的缓存;它们不会被写入清除,因此它们对于像上面提到的点查询更可靠。

几乎所有"生产"我已经处理过的服务器,QC已经或应该被关闭。