使用代理键重构DB

时间:2015-03-13 15:03:12

标签: database-design refactoring-databases

我们拥有大约800个表的数据库,以及大量使用复合键的程序和函数之间的4000。 问题是:你会改变,一块一块地,一张桌子以及所有的程序/功能来使用复合键的代理键吗? 感谢您的任何建议。

原因是:检索数据的速度慢,重建索引的速度慢。但我不确定这些是否是一个很好的理由......

1 个答案:

答案 0 :(得分:1)

我不认为这里有一个简单的答案。 (我假设您在所有表上都有唯一的索引 - 可能是PK。)我的方法是采用几个可识别的慢查询并查看查询计划,并尝试加快查询速度不改变表结构,保存添加索引似乎很有用。

如果这不会产生结果 - 即你现在的结构是好的,因为你可以做到但是它还不够好 - 那么试着在表格中使用代理PK。查询,将新PK作为FK添加到引用表中。然后重复测试,看看有什么不同。

快速查询是一种黑色艺术。我的方法是从查询计划开始并查看涉及表扫描或完整索引扫描的任何内容(如果表只有100行忽略它),然后尝试重构查询以便它有一些方法限制它必须搜索的行数。这可能非常困难,您必须非常了解数据和关系,并且对SQL以及编写选择,子选择和连接的不同方式非常了解。

这有点夸张,但我不认为对这种情况有一个单一的快速答案。