在 Sql 2008 上(之前是 05 年),我在生产中使用了将近 3 年的数据库。一直很好,但性能不是很好。所以我正在调整架构和查询以帮助加快一些事情。此外,每张主表包含大约 1-3 个轧机行(以提供对大小的 ua 估计)。
这是一个示例数据库图(Soz,在 NDA 下,所以我无法显示原件):-
替代文字 http://img11.imageshack.us/img11/4608/dbschemaexample.png
注意事项(与我的问题直接相关):-
- 车辆可以有 0 (NULL) 或 1 个 Radio。(左外连接)
- 车辆可以有 0 个(NULL)或 1 个杯托(左外连接)
- 车辆有 1 种轮胎类型(内连接)。
首先,这看起来像一个规范化的数据库模式。我很烂,DB理论,所以我猜这是3NF(至少)......著名的遗言:)
现在,这正在扼杀我的数据库性能,因为这两个外连接和内连接被调用了很多,并且在许多语句中还有一些连接。
为了尝试解决这个问题,我想我可以尝试indexed view。创建视图是小菜一碟。但是索引它不起作用->无法使用连接或自引用表创建索引视图(也是另一个问题:()。
所以,我已经哭了好几个小时(和/wrists,染了头发,写了一首关于它的 emo 歌曲并将它放在 myfailspace 上)并做了以下事情......
- 在每个“可选”外部连接表中添加了一个新行(在本例中为 Radios 和 CupHolders)。ID = 0,其余数据 = 'Unknown Blah' 或 0。
- 更新父表,使任何 NULL 数据现在都有一个 0。
- 将关系从外部联接更新到内部联接。
现在,这行得通。我什至可以制作索引视图,现在速度非常快。
所以……我很痛苦。这与我所学的一切背道而驰。我觉得脏。独自的。已感染。
这是一件坏事吗?这是为了性能而对数据库进行非规范化的常见场景吗?
我很想对此有一些想法,请:)
PS。谷歌随机找到的那些图片——所以不是我。