我有8张桌子;
现在,我需要能够根据一系列子喷气机搜索不同地区的网点和员工。
我的问题是:是否有一个好的策略,创建一个有点静态的查找表是个好主意,我已经在我的范围内插入了我需要的所有数据?
该表可能增长到+50万行,但我可以说
SELECT ... FROM lookup WHERE subId = 1 OR subId = 2 OR geoId = 1 geoId = 2...etc etc.
所以我要保持联接。
模糊,是的,但我需要这方面的指导!
答案 0 :(得分:2)
这个问题一般无法回答。在某些情况下,出于性能原因(特别是对于数据仓库),您必须保留冗余的非规范化数据。但是,您不应轻易引入冗余或潜在的不一致。
我建议先测量查询性能并检查执行计划。确保创建所需的所有索引。如果查询结果仍然太慢,您可以考虑使用物化视图(称为sql server的索引视图,请参阅,例如here)。具体化与您建议的表非常相似,但它与DBMS自动保持同步。
答案 1 :(得分:1)
在Datawarehouse上下文中,分析查询(从系统中提取数字和统计数据)可能有意义,但对于用户定期更新的oltp系统,大查找表是一个非常糟糕的设计,难以维护(很多)不需要的数据:并非所有记录都需要所有列等),坏数据等。
保持联接只是为了查询系统听起来也不是一个好主意 因为它可能会破坏Sql Server优化器的工作,并且有更多机会导致表扫描 (用一张大桌子可能很难)。
Here是一篇来自Joe Celko的大型查找表上的一篇有趣的文章,听起来与你的问题有关,不完全相同,但可以给你一些见解。
一般建议是:保持标准化设计(特别是对于和oltp系统)。