这个问题很简单,但是我们有很多索引/统计更新问题并不总是在低负载环境中产生适当的新执行计划,我需要检查此问题与你们在这里确定。非聚集索引功能相对于聚集索引寻求
说你已经下表:
/*
TABLES:
TABLE_A (PK_ID INT, [random columns], B_ID INT (INDEXED, and references TABLE_B.PK_ID))
TABLE_B (PK_ID INT, [random columns], C_ID INT (INDEXED, and references TABLE_C.PK_ID))
TABLE_C (PK_ID INT, [random columns])
*/
SELECT *
FROM TABLE_A A
JOIN TABLE_B B ON B.PK_ID = A.B_ID
JOIN TABLE_C C ON C.PK_ID = B.C_ID
WHERE A.randcolumn1 = 'asd' AND B.randcolumn2 <> 5
现在,由于B加入到其聚集的PK列,应该不是意味着上B.C_ID 该索引将不会被使用作为信息已通过B.PK_ID聚集索引返回?事实上,除非查询专门针对该索引上的ID值,否则不会使用B.C_ID上的索引?
这可能看起来像一个简单而愚蠢的问题,但我想确保我得到这个权利。我正在考虑对索引进行调整,因为我们有很多未使用的索引是从旧数据模型继承而来的,并且它们在这个数据库中占据了相当大的空间。经验表明,除了生产之外,我们不能完全信任任何环境下的执行计划,这要归功于与测试环境相比的极端负载,这使得难以可靠地进行测试。
谢谢!
是否使用索引取决于您运行的查询。你可以添加一些示例查询? – Andomar
该查询有一个示例查询。 B.C_ID索引不会被使用的想法是问题的一部分。由于该列上的索引仅包含从B到C的引用的FK_ID,并且该值将永远不会被查询(它只是一个ID值,除了用作存储关系连接的ID之外,没有业务/编程用途),那么该指数也不应该被使用。 – Kahn