如何在MySQL中选择多列索引和单列索引

时间:2012-07-27 22:52:39

标签: mysql optimization indexing

我有一个名为users的表,users.zbid上有一个PRIMARY键。但是,在其上运行的所有SELECT个查询都包含WHERE子句cid='$cid' AND zbid='$zbid'。我应该为cid添加索引还是为cid,zbid添加多列索引?我知道WHERE上的cid条款似乎是多余的zbidPRIMARY,但主要是作为预防步骤,每个cid指定一个不同的论坛,如果出现问题,我不希望每个论坛都有效。

其次,我有另一个名为notifications的表。在此表上运行的唯一查询使用where子句cid='$cid' AND zbid='$zbid',我应该将它们作为单个索引添加还是只添加一个?为什么呢?

3 个答案:

答案 0 :(得分:1)

  1. 如果您在users.zdib上有主键,则不需要复合索引(mysql将使用zdib上的现有索引)
  2. 如果以与第一个表中类似的方式使用cid,则不需要复合索引,只需zdib上的索引即可。否则,请将其设为2列。

答案 1 :(得分:0)

我认为多列索引的表现会更好。

cid,zbid将需要1次搜索

有2个指数将需要2次寻求

答案 2 :(得分:0)

在第一种情况下,MySQL将使用PRIMARY_KEY(与你拥有的其他AND无关)。

在第二种情况下,您应该将它们都添加到一个索引中(假设列是非唯一的),这样可以留下更少的结果进行过滤。

您还应该检查covering indexes。但我认为这些不会对你的情况产生影响。