mysql复合主键优缺点_复合主键在MySQL中的性能缺点

INSERT和UPDATE性能变化不大:对于(INT)和(INT,INT)键几乎相同。

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

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

这意味着如果两个值都包含键,那么对这两个值的搜索将更快;不需要额外的键查找。

假设你的查询是这样的:

SELECT *

FROM mytable

WHERE col1 = @value1

AND col2 = @value2

并且表布局是这样的:

CREATE TABLE mytable (

col1 INT NOT NULL,

col2 INT NOT NULL,

data VARCHAR(200) NOT NULL,

PRIMARY KEY pk_mytable (col1, col2)

) ENGINE=InnoDB

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

如果您使用自动增量字段作为假ID:

CREATE TABLE mytable (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

col1 INT NOT NULL,

col2 INT NOT NULL,

data VARCHAR(200) NOT NULL,

UNIQUE KEY ix_mytable_col1_col2 (col1, col2)

) ENGINE=InnoDB

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

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

在这两种情况下,将创建相同的索引(对于PRIMARY KEY或UNIQUE KEY),并且将以相同的方式使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值