首页 > 代码库 > Mysql性能优化GUID主键
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表信息
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 + 分店该表的主键
Mysql性能优化GUID主键