我有一个类似于这样的表结构:
人
Id
PersonDemographic
Id
PersonId
Person > PersonDemographic
是一对一关系,并且必须通过PersonDemogrphic.PersonId
上的唯一约束强制执行。
此结构遍及此特定数据库。因此,从Person到包含人员详细信息的表的任何连接都包含哈希匹配和表扫描。
为了优化查询,我尝试将人ID(而不是表标识)作为群集主键。这导致嵌套循环和聚集索引扫描(以及略微的性能改进)。
知道这是一对一的关系我认为我可以通过提供FORCESEEK
提示来提高性能;然而,这使情况变得更糟。根据执行计划中的统计信息,看起来“反向关系”表上的聚簇索引查找仍然每行执行一次运算符,而不是执行“通常相关”的表,这些表具有估计的执行次数1。
我正在寻找建议来获得此方案的最佳执行计划。虽然我意识到“修复你的表格结构”是有效的并且可能是最好的答案,但我希望在此时避免这种情况。
谢谢!
答案 0 :(得分:0)
您是否尝试过使用外键而不仅仅是一个唯一约束?