由於系統中大量使用GUID作為主鍵,導致數據文件大,數據查詢速度慢。意向轉為Int主鍵。先查看下單表測試GUID和Int分別作為主鍵的結果。
測試條件如下:
AMD E1-1200 APU 1.4G 2GRam 100Lan, 250GB HD
Mysql 5.5,innodb_buffer_pool_size = 512M
測試表order_dish_history:60個字段,共5個索引,4個guid索引,1個timestamp+PK索引用於表分區,其它字段兩表完全相同;表分為12個分區每個月份一個分區,每個分區10萬條數據
GUID表及INT表信息
10萬數據:
SELECT SQL_NO_CACHE SUM(dish_num),SUM(dish_money),SUM(dish_price),
AVG(dish_num),AVG(dish_money),AVG(dish_price),
MAX(dish_num),MAX(dish_money),MAX(dish_price)
FROM order_dish_history_int WHERE business_date BETWEEN '2014-01-01' AND '2014-01-02'
GROUP BY dish_id
50萬數據:
讀取5個分表的數據,WHERE business_date BETWEEN '2014-01-01' AND '2014-05-02'
100萬數據:
讀取10個分表的數據,WHERE business_date BETWEEN '2014-01-01' AND '2014-10-02'
可以看出Int做主鍵在數據量大的時候,查詢速度和對機子內存的要求明顯勝出。
對表結構的數據類型做更改
數據類型等根據數據取值范圍更改為tinyint,mediumint unsigned等。
對於分布式連鎖的,在總部采用了聯合主鍵。例如,可以取分店的唯一標識shop_id + 分店該表的主鍵