Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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:最好有两个非唯一索引列,或者将它们组合在唯一主键中?_Mysql_Innodb_Composite Primary Key_Database Indexes - Fatal编程技术网

MySQL/InnoDB:最好有两个非唯一索引列,或者将它们组合在唯一主键中?

MySQL/InnoDB:最好有两个非唯一索引列,或者将它们组合在唯一主键中?,mysql,innodb,composite-primary-key,database-indexes,Mysql,Innodb,Composite Primary Key,Database Indexes,我在InnoDB中使用MySQL 就语义而言,我不需要主键,那么主键(或者更确切地说,唯一索引)比非唯一索引能更快地进行查询吗 我有两列适合索引,但不是唯一的。然而,这两列的组合总是唯一的。这些列也是非空的 只是将两个非唯一列设置为索引更好,还是在两列的组合上创建主键更好 访问模式通常会修改两行或四行,其中第一列是给定的值(第二列是不同的,正如我提到的,每个组合都是唯一的) 例如,col1和col2是相似的 11 1.2 13 15 2.1 2 2.3 2.5 31 3.2 3 3 例如,一次更

我在InnoDB中使用MySQL

就语义而言,我不需要主键,那么主键(或者更确切地说,唯一索引)比非唯一索引能更快地进行查询吗

我有两列适合索引,但不是唯一的。然而,这两列的组合总是唯一的。这些列也是非空的

只是将两个非唯一列设置为索引更好,还是在两列的组合上创建主键更好

访问模式通常会修改两行或四行,其中第一列是给定的值(第二列是不同的,正如我提到的,每个组合都是唯一的)

例如,col1和col2是相似的

11
1.2
13
15
2.1
2
2.3
2.5
31
3.2
3 3

例如,一次更改行(1,2)和(1,3)


接下来的问题是关于数据类型。col1适合小字体,col2适合小字体。但是,我不确定当组合到单个索引中时,使用小于int的类型以及不同的类型会对性能产生什么影响。手册中说,当用于主键时,多个列是连接在一起的。使用同一类型smallint更好吗?甚至使用ints?在内存访问方面,没有对齐,全字访问速度最快?这对这里有影响吗?

无论您是否使用它,InnoDB总是有一个主键,类似于。InnoDB使用聚集索引存储数据,这基本上意味着主键和数据位于同一位置。如果没有定义合适的索引,它将创建一个内部索引。这也意味着主键是“自由”的;它不需要任何额外的空间,因为数据存储在索引中。如果总是使用这两列来查找要更新的行,那么一定要创建一个复合主索引。即使不是每次都使用两列来过滤数据,也可能会从复合主索引中获益

至于数据类型,我会使两者尽可能小。我不确定在内存中如何处理索引的具体细节,但您可能无法测量由于内存访问差异而产生的任何显著差异,较小的索引大小也不会有任何影响