0

我有 8 张桌子;

  1. 雇员
  2. employee_subjects
  3. 出口
  4. outlet_subjects
  5. 科目
  6. 地理
  7. 出口地理
  8. 员工地理

现在,我需要能够在一系列不同的地理区域内并基于一系列子喷气式飞机搜索网点和员工。

我的问题是:是否有一个好的策略,创建一个有点静态的查找表是否是个好主意,我已经在我的范围内插入了我需要的所有数据?

该表可能会增长到 +5000 万行,但我可以说

SELECT ... FROM lookup WHERE subId = 1 OR subId = 2 OR geoId = 1 geoId = 2...etc etc.

所以我要保持连接。

模糊,是的,但我需要这方面的指导!

4

2 回答 2

2

这个问题不能笼统地回答。在某些情况下,出于性能原因(尤其是数据仓库),您必须保留冗余的非规范化数据。但是,您不应轻易引入冗余或潜在的不一致。

我建议首先测量查询性能并检查您的执行计划。确保创建所需的所有索引。如果查询结果仍然太慢,您可能会考虑使用物化视图(称为 sql server 的索引视图,请参见,例如,此处)。物化表与您建议的表非常相似,但它由 DBMS 自动与您的数据保持同步。

于 2013-11-09T22:28:47.070 回答
1

在用于分析查询(从系统中提取数字和统计信息)的数据仓库上下文中,这可能是有意义的,但是对于用户定期更新的 oltp 系统,大型查找表是一个非常糟糕的设计,难以维护(大量不需要的数据:并非所有记录都需要所有列等),错误数据等。

仅仅为了查询系统而保留连接听起来也不是一个好主意,因为它可能会破坏 Sql Server 优化器的工作并且有更多的机会导致表扫描(对于大表可能很难)。

是 Joe Celko 关于大型查找表的一篇有趣的文章,听起来与您的问题有关,并不完全相同,但可以为您提供一些见解。

一般建议是:保持规范化设计(尤其是 oltp 系统)。

于 2013-11-10T12:03:01.517 回答