Sql 查表还是别的什么?

Sql 查表还是别的什么?,sql,sql-server,database-design,Sql,Sql Server,Database Design,我有8张桌子 雇员 雇员与大学科目 出口 大学科目 科目 地理 出口地理 雇员地理 现在,我需要能够根据一系列主题,在不同的地理位置范围内搜索门店和员工 我的问题是:是否有一个好的策略,创建一个有点静态的查找表,在其中插入我需要的所有数据,这是一个好主意 表可能会增长到+5000万行,但我可以说 SELECT ... FROM lookup WHERE subId = 1 OR subId = 2 OR geoId = 1 geoId = 2...etc etc. 所以我得把接头挡在外面 含糊

我有8张桌子

  • 雇员
  • 雇员与大学科目
  • 出口
  • 大学科目
  • 科目
  • 地理
  • 出口地理
  • 雇员地理
  • 现在,我需要能够根据一系列主题,在不同的地理位置范围内搜索门店和员工

    我的问题是:是否有一个好的策略,创建一个有点静态的查找表,在其中插入我需要的所有数据,这是一个好主意

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

    SELECT ... FROM lookup WHERE subId = 1 OR subId = 2 OR geoId = 1 geoId = 2...etc etc.
    
    所以我得把接头挡在外面


    含糊不清,是的,但我需要这方面的指导

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


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

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


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

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


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

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


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

    在数据仓库环境中,分析查询(从系统中提取数字和统计数据)可能是有意义的,但对于用户定期更新的oltp系统来说,大型查找表是一种非常糟糕的设计,很难维护(大量非需求数据:并非所有记录都需要所有列等)、坏数据等

    仅仅为了查询系统而保留连接听起来也不是个好主意 因为它可能会破坏Sql Server optimizer的工作,并有更多的机会导致表扫描 (如果有一张大桌子,这可能会很困难)

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


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

    在数据仓库环境中进行分析查询(从系统中提取数字和统计数据),这可能是有意义的,但对于用户定期更新的oltp系统,大的查找表是非常糟糕的设计,很难维护(大量非必需数据:并非所有记录所需的所有列等)、错误数据等

    仅仅为了查询系统而保留连接听起来也不是个好主意 因为它可能会破坏Sql Server optimizer的工作,并有更多的机会导致表扫描 (如果有一张大桌子,这可能会很困难)

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


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

    在数据仓库环境中进行分析查询(从系统中提取数字和统计数据),这可能是有意义的,但对于用户定期更新的oltp系统,大的查找表是非常糟糕的设计,很难维护(大量非必需数据:并非所有记录所需的所有列等)、错误数据等

    仅仅为了查询系统而保留连接听起来也不是个好主意 因为它可能会破坏Sql Server optimizer的工作,并有更多的机会导致表扫描 (如果有一张大桌子,这可能会很困难)

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


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

    在数据仓库环境中进行分析查询(从系统中提取数字和统计数据),这可能是有意义的,但对于用户定期更新的oltp系统