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表信息

0992514190523d2c02a4a4c2827b3d44.png

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

45f8eb298fe4ec8228f980a859136085.png

50万数据:

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

a62b82407e9f5de532aa759895a28b1d.png

100万数据:

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

be48c36015142a9cc978d07ff4add656.png

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

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

0b9b6b740a295db42aa171156d090b8b.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值