我们有一个包含大约 800 个表和 4000 个在过程和函数之间的数据库,并大量使用复合键。问题是:您是否会逐个更改表格和所有过程/功能以使用复合键的代理键?感谢您的任何建议。
其原因是:检索数据缓慢,重建索引缓慢。但我不确定这些是否是一个很好的理由......
我们有一个包含大约 800 个表和 4000 个在过程和函数之间的数据库,并大量使用复合键。问题是:您是否会逐个更改表格和所有过程/功能以使用复合键的代理键?感谢您的任何建议。
其原因是:检索数据缓慢,重建索引缓慢。但我不确定这些是否是一个很好的理由......
我不认为这里有一个简单的答案。(我假设您在所有表上都有唯一索引 - 可能是 PK。)我的方法是采取一些可识别的慢速查询并查看查询计划,并尝试加快查询速度在不改变表结构的情况下,保存看起来有用的添加索引。
如果这没有产生结果 - 即您当前的结构是一个很好的结构,但它还不够好 - 然后尝试在查询中的表上使用代理 PK,将新的 PK 作为 FK 添加到引用表中。然后重复你的测试,看看有什么不同。
使查询更快是一种黑色艺术。我的方法是从查询计划开始,查看涉及表扫描或全索引扫描的任何内容(如果表只有 100 行,请忽略它),然后尝试重组查询,使其有某种方式限制它必须搜索的行数。这可能非常困难,您必须非常了解数据和关系,并且非常了解 SQL 以及编写选择、子选择和连接的不同方式。
这有点胡说八道,但我认为对于这种情况没有一个硬性的答案。