Mysql性能优化GUID主键

由于系统中大量使用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表信息

image_thumb[5]

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

image

50万数据:

读取5个分表的数据,WHERE business_date BETWEEN '2014-01-01' AND '2014-05-02'

image

100万数据:

读取10个分表的数据,WHERE business_date BETWEEN '2014-01-01' AND '2014-10-02'

image

可以看出Int做主键在数据量大的时候,查询速度和对机子内存的要求明显胜出。

对表结构的数据类型做更改

image

数据类型等根据数据取值范围更改为tinyint,mediumint unsigned等。

对于分布式连锁的,在总部采用了联合主键。例如,可以取分店的唯一标识shop_id + 分店该表的主键

 

posted @ 2014-12-03 18:22  zzq417  阅读(5027)  评论(0编辑  收藏  举报