-1

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

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

4

3 回答 3

1
  1. 如果主键 on users.zdib,则不需要复合索引(mysql 将使用现有索引 on zdib
  2. 如果cid以与您的第一个表中类似的方式使用,则不需要复合索引,只需一个索引就足够了zdib。否则,将其放在 2 列上。
于 2012-07-27T23:11:24.880 回答
0

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

cid,zbid 将需要 1 次搜索

拥有 2 个索引将需要 2 次搜索

于 2012-07-27T22:57:03.010 回答
0

在第一种情况下,MySQL 将使用 PRIMARY_KEY(你有什么其他的 AND 并不重要)。

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

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

于 2012-07-27T23:13:42.357 回答