經過查資料發現mysql可以通過變量tmp_table_size和max_heap_table_size來控制內存表大小上限,如果超過上限會將數據寫到磁盤上,從而會有物理磁盤的讀寫操作,導致影響性能。
我們可以通過調整這兩個變量的值來提升性能(當然前提條件是mysql所在服務器有足夠的內存)。
首先可以通過下面語句查看當前的變量值:
SHOW VARIABLES LIKE ‘max_heap_table_size%’;
然後通過SET GLOBAL max_heap_table_size=522715200; 設置變量值為512M,你可以根據自己的情況設置合適的值;tmp_table_size變量的設置方法一樣。
SHOW VARIABLES LIKE ‘tmp_table_size’;
SET GLOBAL max_heap_table_size=512*1024*1024;
其次發現開發人員編寫的語句,根本無法使用到緩存。
# Time: 140901 16:26:23
# User@Host: wealth[wealth] @ [172.20.1.70]
# Query_time: 2266.887211 Lock_time: 0.000196 Rows_sent: 17 Rows_examined: 71501657
SET timestamp=1409559983;
SELECT a.Pid,count(a.id) as count,p.ProductId,p.ProductName,p.ProductType,p.Profit,p.StartTime,p.EndTime,p.StartMoney,p.AddTime,i.IssuerName FROM `Issuer`as i,`Count` as a left join Product as p on a.Pid=p.ProductId WHERE a.Stime > ‘time() – 3600*24*30′ and p.IssuerId=i.IssuerId AND p.IsDel=0 group by a.Pid order by count(a.id) desc limit 0,17;
哎~~沒辦法,這個sql優化是個長期的過程