我有一个看起来像这样的表结构:
人
Id
人口统计
Id
PersonId
这Person > PersonDemographic
是一对一的关系,并且通过对 的唯一约束被迫如此PersonDemogrphic.PersonId
。
这种结构遍及这个特定的数据库。因此,任何从 Person 到包含人员详细信息的表的连接都包括哈希匹配和表扫描。
为了优化查询,我尝试将人员 ID(而不是表身份)作为聚集主键。这导致了嵌套循环和聚集索引扫描(以及轻微的性能改进)。
知道这是一对一的关系,我想我可以通过给 joinFORCESEEK
提示来提高性能;然而,这使情况变得更糟。根据执行计划中的统计数据,“反向关系”表上的聚集索引搜索似乎仍在每行执行一次运算符,而不是“通常相关”表的执行,估计执行次数为1.
我正在寻找建议以获得针对这种情况的最佳执行计划。虽然我意识到“修复你的表结构”是有效的并且可能是最好的答案,但我希望在这个时候避免这种情况。
谢谢!