0

我有一个调用存储过程的搜索,该过程最多接受 5 个参数。查询中有许多表,但参数都在查询中的单个表上进行过滤。问题是最好为每个参数(表中的字段)或一个涵盖所有参数的索引建立一个索引,显然还有其他查询可能出于自己的目的使用这些字段中的一个或多个,所以也许是值得为每个字段留下一个索引。

抱歉,如果这不是一个明确的问题

问题:有一个覆盖索引是否更好 - 覆盖所有搜索字段。或每个索引

哪个是更好的做法?

任何帮助非常感谢

纳特

4

1 回答 1

0

我怀疑答案取决于最常指定“最多”5 个参数的方式。如果它们通常以特定的增加特异性的顺序指定(例如,clientid 的记录,或 clientid + accountid,或 clientid + accountid + 月份等),那么如果您按该顺序构建覆盖查询,则大多数 <5查询仍然能够有效地使用它。

如果,OTOH,指定了哪些特定的参数,哪些不是相对随机的,并且您有其他进程想要在其中一些列上建立索引,那么您也可以单独索引每一列。

当然,在理想的世界中,您将拥有一个性能测试平台来凭经验找出正确的决定。但是很少有项目是在理想世界中构建的。即便如此,即使您的 DEV 装备看起来与生产完全不同,您也无法通过一点测试。

于 2013-01-30T15:52:35.627 回答