单独的列索引VS Multiple

时间:2017-10-28 18:17:30

标签: mysql indexing

我有一个包含3列id safeid branchid

的表格

- 有些时候我需要safeid获取记录,所以我有一个safeid (INDEX)

- 有些时候我需要branchid获取记录,所以我有一个branchid (INDEX)

- 有些时候我需要一起获取safeidbranchid的记录。所以问题是:我是否必须为这两列创建另一个branchid_safeid (INDEX)以便更快地进行选择?

另一个问题

id列是唯一的主键。我是否需要创建id (INDEX)或主键本身是索引

1 个答案:

答案 0 :(得分:2)

(我重新打开是因为“dups”只回答了第二个问题。)

问题#1:对于WHERE safeid = 123 AND branchid = 234,您需要INDEX(safeid, branchid)。更好的是,有两个索引:

INDEX(safeid, branchid),  -- for the pair, or for just `safeid`
INDEX(branchid)           -- for branchid

这将照顾你提到的3个案例。

更多讨论here

问题2:至于“另一个问题”,在MySQL(特别是InnoDB)中,PRIMARY KEY与数据“聚集”在一起;它是UNIQUE;它是INDEX。基本上没有理由通过添加单独的PRIMARY KEYUNIQUE KEY来复制INDEX

以下是之前引用的“重复”:

Is the primary key automatically indexed in MySQL?
Do I need to create separate index for primary key of relational database table