原來 MySQL 本身就可以做 Cache 的功能~ 🙂
Query Cache 在提高資料庫性能方面具有非常重要的作用。
其設定也非常簡單,僅需要在配置檔寫入兩行: query_cache_type 和 query_cache _size,而且 MySQL 的 query cache 非常快!而且一旦命中,就直接發送給用戶端,節約大量的 CPU 時間。
當然,非 SELECT 語句對緩衝是有影響的,它們可能使緩衝中的資料過期。一個 UPDATE 語句引起的部分表修改,將導致對該表所有的緩衝資料失效,這是 MySQL 為了平衡性能而沒有採取的措施。因為,如果每次 UPDATE 需要檢查修改的資料,然後撤出部分緩衝將導致代碼的複雜度增加。
query_cache_type 0 代表不使用緩衝, 1 代表使用緩衝,2 代表根據需要使用。
設置 1 代表緩衝永遠有效,如果不需要緩衝,就需要使用如下語句:
SELECT SQL_NO_CACHE * FROM my_table WHERE ...
如果設置為 2 ,需要開啟緩衝,可以用如下語句:
SELECT SQL_CACHE * FROM my_table WHERE ...
用 SHOW STATUS 可以查看緩衝的情況:
mysql> show status like 'Qca%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_queries_in_cache | 8 |
| Qcache_inserts | 545875 |
| Qcache_hits | 83951 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2343256 |
| Qcache_free_memory | 33508248 |
| Qcache_free_blocks | 1 |
| Qcache_total_blocks | 18 |
+-------------------------+----------+
8 rows in set (0.00 sec)
如果需要計算命中率,需要知道伺服器執行了多少 SELECT 語句:
mysql> show status like 'Com_sel%';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_select | 2889628 |
+---------------+---------+
1 row in set (0.01 sec)
在本例中, MySQL 命中了 2,889,628 條查詢中的 83,951 條,而且 INSERT 語句只有 545,875 條。因此,它們兩者的和和280萬的總查詢相比有很大差距,因此,我們知道本例使用的緩衝類型是 2 。
而在類型是 1 的例子中, Qcache_hits 的數值會遠遠大於 Com_select 。
前輩想請問一下~如果說有幾萬筆的資料再做Query的時候
該怎麼做才會快呢??
因為我目前的www.mindway.asia我覺得速度有點慢
同時也不太清楚慢的原因,不知前輩可否給予指導呢!!!
才幾萬筆資料, 是不會慢的.
你的問題應該不是在 DB 唷~ 🙂
前輩不好意思~在詢問一下
因為我透過Chrome來看的時候有時候都會發現
光是連到某一頁得時間就好幾秒不知道我該怎麼解決???
圖片顯示太多導致顯示速度很慢~請問是否該使用tomact去實作負載平衡
加速圖片顯示呢? 可是我沒做過不知道該怎麼做才好
如果做了的話是要把圖片也另存好幾份嗎??
不知道前輩可否替我解惑!!!
我對於速度慢真的感到超無力的...我有用Curl的指令以及youtube api
但總覺得價在家裡的主機還比外面的空間快的感覺....
你先把圖片和程式分開 Domain, 然後還慢的話, 再來把圖片與程式的機器拆開看看, 然後再來看看問題在哪邊~ 🙂
想請問一下~是否是用Tomcat呢?
因為這部分我沒有經驗~所以想請問前輩您的意見!
By the way 如果前輩不嫌麻煩願意解惑的話~可否與我交換MSN
MSN: [email protected]
我都不用 tomcat 耶, 我不用 Java 寫 Web. XD
Hi~我覺得你的文章很棒耶,借轉發可以嗎
請~ 記得標上原出處即可. 🙂