2014-04-06 30 views
0

當我通過查詢,如下所示提高效率:如何提高MySQL中的緩存使用時查詢

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性能?

非常感謝!

回答

0

我會使用索引的列USER_ID,從手動(https://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html):

MySQL使用索引這些操作:

  • 要找到快速匹配WHERE子句的行。
+0

是的,我已經使用過它,但是對於像我這樣的查詢那麼多的查詢,我不知道如何提高查詢吞吐量。當我將query_cache_type從1更改爲2時,吞吐量甚至更小。你知道那是爲什麼嗎?如何優化緩存以提高查詢吞吐量?僅供參考,我的表格存儲大約500M數據。 – user3502577

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的值要嚴格得多,而且只有在調用者明確請求時纔會觸發緩存,否則不會緩存。

0

你有一個索引id?可能你有PRIMARY KEY(id),這更好。在這種情況下,不要打擾查詢緩存。

你有很多寫入該表嗎?每發生一次寫入,全部條目在QC中爲表被清除。這意味着掃描32M尋找該表的任何條目。掃描費用昂貴,您在QC中沒有任何類似的查詢。

返回id被索引...對於MyISAM表,key_buffer_size應調整到可用RAM的20%。對於InnoDB表,innodb_buffer_pool_size應該是可用RAM的70%左右。這些是特定於引擎的高速緩存;它們不會被寫入清除,因此它們對於所提到的點查詢更加可靠。

在我處理過的幾乎所有「生產」服務器中,質量控制已經或應該關閉。