MySQL中的复合主键是否会性能缺陷

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

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

如果您的表格是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 

,发动机将只需要查找在表本身的确切键值。

如果使用自动增量字段作为假身份证:

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)并且将以相同的方式使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值