我有一个名为users
的表,users.zbid
上有一个PRIMARY键。但是,在其上运行的所有SELECT
个查询都包含WHERE
子句cid='$cid' AND zbid='$zbid'
。我应该为cid
添加索引还是为cid,zbid
添加多列索引?我知道WHERE
上的cid
条款似乎是多余的zbid
是PRIMARY
,但主要是作为预防步骤,每个cid
指定一个不同的论坛,如果出现问题,我不希望每个论坛都有效。
其次,我有另一个名为notifications
的表。在此表上运行的唯一查询使用where子句cid='$cid' AND zbid='$zbid'
,我应该将它们作为单个索引添加还是只添加一个?为什么呢?
答案 0 :(得分:1)
users.zdib
上有主键,则不需要复合索引(mysql将使用zdib
上的现有索引)cid
,则不需要复合索引,只需zdib
上的索引即可。否则,请将其设为2列。答案 1 :(得分:0)
我认为多列索引的表现会更好。
cid,zbid将需要1次搜索
有2个指数将需要2次寻求
答案 2 :(得分:0)
在第一种情况下,MySQL将使用PRIMARY_KEY(与你拥有的其他AND无关)。
在第二种情况下,您应该将它们都添加到一个索引中(假设列是非唯一的),这样可以留下更少的结果进行过滤。
您还应该检查covering indexes。但我认为这些不会对你的情况产生影响。