mysql 隐式主键_MySQL中复合主键性能的缺点

我们有一个表,该表具有由三个字段组成的复合主键(在MySQL 5.1中是这样)。 该表上每秒有近200个插入和200个选择,并且表的大小约为100万行,并且还在不断增加。

我的问题是:"复合主键"是否会降低此表上"插入和选择"的性能?

我应该使用简单的自动递增INT ID字段而不是Composite Primary Key吗? (我认为答案与MySQL处理多列索引的方式非常相关)

INSERT和UPDATE性能几乎没有变化:(INT)和(INT, INT)键几乎相同。

复合PRIMARY KEY的SELECT性能取决于许多因素。

如果您的表是InnoDB,则该表隐式聚集在PRIMARY KEY值上。

这意味着如果两个值都包含关键字,则搜索这两个值将更快:不需要额外的关键字查找。

假设您的查询是这样的:

SELECT  *

FROM    mytable

WHERE   col1 = @value1

AND col2 = @value2

表格的布局是这样的:

,引擎将只需要在表本身中查找确切的键值。

如果您使用自动递增字段作为伪造ID:

,则引擎首先需要在索引ix_mytable_col1_col2中查找(col1, col2)的值,从索引中检索行指针(id的值),并在表中通过id进行另一次查找本身。

但是,对于MyISAM表,这没有什么区别,因为MyISAM表是堆组织的,并且行指针只是文件偏移量。

在这两种情况下,将创建相同的索引(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值