Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL Innodb:大型复合PK无其他索引_Mysql_Primary Key_Innodb_Composite Index - Fatal编程技术网

MySQL Innodb:大型复合PK无其他索引

MySQL Innodb:大型复合PK无其他索引,mysql,primary-key,innodb,composite-index,Mysql,Primary Key,Innodb,Composite Index,我正在创建一个包含四列的Innodb表 桌子 从逻辑角度来看,a、B、C列必须一起组成PK。但是,为了提高性能并能够直接从索引中读取(使用索引),我正在考虑一个包含所有4列(a、B、C、D)的PK 问题: 在Innodb表的主键上追加一列会有什么样的性能 考虑 代理主键是绝对不可能的 此表上不存在其他索引 表是读/写密集型的(两者大约相等) 谢谢大家! 需要考虑的几件事: 除非所讨论的查询使用索引中的所有列,否则不会使用索引 正如jeremycole所指出的:在Innodb结构中,所有行数据

我正在创建一个包含四列的Innodb表

桌子

从逻辑角度来看,a、B、C列必须一起组成PK。但是,为了提高性能并能够直接从索引中读取(使用索引),我正在考虑一个包含所有4列(a、B、C、D)的PK

问题:

在Innodb表的主键上追加一列会有什么样的性能

考虑

  • 代理主键是绝对不可能的
  • 此表上不存在其他索引
  • 表是读/写密集型的(两者大约相等)

谢谢大家!

需要考虑的几件事:

  • 除非所讨论的查询使用索引中的所有列,否则不会使用索引
  • 正如jeremycole所指出的:在Innodb结构中,所有行数据都存储在聚集索引(主索引)的B树叶节点中
  • 这一概念包括: http://blog.johnjosephbachir.org/2006/10/22/everything-you-need-to-know-about-designing-mysql-innodb-primary-keys/

    。。。在jeremy的博客中:


    因此,对a、B、C的查询就足以有效地获取此Innodb表上的所有值

    在InnoDB中,
    主键
    索引结构包括所有非键字段,并将自动使用它们来覆盖索引查询和行消除。除了
    主键
    索引结构之外,没有单独的“数据”结构。无需向
    主键定义本身添加其他字段。请注意,当它在InnoDB表上使用
    主键时,它不会显示
    使用索引的
    ,因为它是一个不同的代码路径,不会触发添加该消息。

    列d
    添加到您的PK将意味着可以在
    (a列、b列、c列)
    只要
    列d
    不同。还有,为什么不在表中添加其他索引:如果你想要一个覆盖索引,为什么不在PK之外添加一个呢?记住,过早优化是万恶之源-你真的面临着你试图解决的性能问题吗?如果是,那是什么?非常好的观点h
    column\u d
    ,我问是否有经验法则或指导原则。有很多表都有大型PK,我希望得到指导。谢谢。对不起,但这个答案不正确。InnoDB中的
    主键
    索引结构包括所有非键字段作为其“值”,这意味着没有单独的“数据”结构(例如MyISAM
    .MYD
    文件)。为这种情况创建单独的覆盖索引弊大于利。jeremy完全正确,关于我先前的错误答案。
     column_a (tiny_int)
     column_b (medium_int)
     column_c (timestamp)
     column_d (medium_int)
    
     Primary Key -> column_a, column_b, column_c