我有一个搜索,它调用一个最多接受5个参数的存储过程。 查询中有许多表,但params都在查询中的单个表上进行过滤。 问题是 最好为每个参数(表中的字段)或一个覆盖所有参数的索引建立索引 显然,其他查询可能会将这些字段中的一个或多个用于自己的目的,因此可能需要为每个字段留下索引。
抱歉,如果这不是一个明确的问题
问题:拥有覆盖索引是否更好 - 涵盖所有搜索字段。 要么 每个
的索引这是更好的做法吗?
任何帮助非常感谢 感谢
NAT
答案 0 :(得分:0)
我怀疑答案取决于最常指定“最多5”参数的方式。如果它们通常以增加特异性的特定序列(例如,clientid,clientid + accountid,clientid + accountid + month等的记录)指定,那么如果按照该顺序构建覆盖查询,那么大部分< 5个查询仍然可以有效地使用它。
如果,OTOH,指定了哪些特定参数并且不是相对随机的,并且您有其他进程想要对这些列中的某些列进行索引,那么您也可以单独索引每个列。
在一个理想的世界中,当然,你会有一个性能测试装置来根据经验找出正确的决定。但很少有项目建立在理想世界中。即便如此,即使你的DEV装置看起来不像生产,你也无法进行一些测试。