可以将ID(自动递增)作为MySQL主键的第二列吗?

时间:2016-08-11 18:43:50

标签: mysql

是否可以将id(自动递增)作为MySQL主键的第二列?见下面的order表。

我的想法是,当我使用orders查询order表时,MySQL通过主键索引(customer_id,id)访问customer_id会更快。谢谢

  Customer
+-------------+
| id (autoinc)| --> primary key
|- - - - - - -|
| name        |
| address     |
+-------------+
       |
       |
       |
       A
  Order     
+------------------+        
| customer_id (fk) | --- primary key
| id     (autoinc) | --- primary key        
|- - - - - - - - - |
| date             |
+------------------+ 

2 个答案:

答案 0 :(得分:1)

您可以使用下面的表格语法执行此操作,但我不确定您将获得哪些性能优势。我会调查并更新我的答案。

CREATE TABLE your_table (a INT NOT NULL, b INT NOT NULL AUTO_INCREMENT UNIQUE);
ALTER TABLE your_table ADD PRIMARY KEY (a, b);

但是,你不能将UNIQUE键放在b。

答案 1 :(得分:0)

以gr1zzly be4r的答案为基础......

InnoDB实际上允许您使用自动增量作为任何KEY的第一列,而不一定只是一个唯一的键。

CREATE TABLE `your_table` (
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`a`,`b`),
  KEY `b` (`b`)
) ENGINE=InnoDB;

INSERT INTO your_table (a) VALUES (42), (43);
SELECT * FROM your_table;
+----+---+
| a  | b |
+----+---+
| 42 | 1 |
| 43 | 2 |
+----+---+

换句话说,b列不一定是唯一的。