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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章