回答
宽桌子没有什么固有的错误。规范化的主要情况是数据库大小,大量空列占用大量空间。
您拥有的列越多,查询就会越慢。
这只是一个事实。这并不是说你没有理由拥有许多专栏。上面的内容并没有给我们一个单一的理由,把一个实体的表格与许多列拆分成多个表格,列数更少。这种解决方案的管理开销很可能超过任何感知的性能收益。
根据我对异常宽表(批量导入数据的非规范化架构)的经验,我建议给你的第一个建议是尽量减少列数。我必须处理大量疯狂的数据,并将大多数列保留为VARCHAR(255)。我建议不要这样。虽然便于开发,但性能会失去控制,特别是在使用Perl时。将列缩小到最小值(例如VARCHAR(18))非常有帮助。
存储过程只是批量的SQL命令;除了某些类型的存储过程的常规使用将最终使用缓存查询计划(这是性能提升)之外,他们没有任何直接的速度。
您可以使用索引来加速某些查询,但这里没有硬性规则和快速规则。良好的索引设计完全取决于您正在运行的查询类型。根据定义,索引会使写入速度变慢;它们的存在只是为了让你的阅读更快。
在表中有很多列的问题是使用集群主键查找行可能很昂贵。如果可以更改模式,将其分解为许多标准化表格将是提高效率的最佳途径。我强烈推荐这门课程。
如果不是,那么您可能可以使用索引来加快一些SELECT查询的速度。如果您的查询仅使用少量列,则在这些列上添加索引可能意味着不需要扫描聚集索引。当然,就存储空间和INSERT,UPDATE和DELTETE时间而言,索引总是要付出代价的,所以这可能不适合你。
当您通常需要特定行的所有字段时,宽表可以非常高效。您是否追查过您用户的使用模式?如果他们通常只从多行中拉出一个或两个字段,那么您的表现将受到影响。主要问题是您的总行大小达到8k页的大小。这意味着SQL必须为每一行(第一页+溢出页面)打印两次磁盘,并且不计算任何索引命中。
在Universal Data Models的家伙将有一些好的想法重构你的表。 Red Gate的SQL Refactor使分割表更容易。
- 1. SSAS多维数据集设计与性能相关的问题
- 2. 与类别和子类别相关的数据库设计
- 3. 数据库设计和性能
- 4. 数据库设计和性能
- 5. 数据库设计 - 自定义属性表 - 与“相关”实体表
- 6. 连接表关系中的数据库设计和可选性
- 7. Graphite和Elasticsearch数据库的相关性
- 8. 数据库/模型设计 - 与另一个人相关的人
- 9. 数据库表关系的设计
- 10. 优选的数据库设计了两个相关的表
- 11. 努力与数据库设计/关系
- 12. 数据库设计选择性能
- 13. 数据库设计最佳性能
- 14. MySQL数据库 - 性能设计
- 15. 有两个相关表的数据库设计
- 16. 设计数据库模型和相关的sql查询
- 17. HAS_MANY与主数据库的关系数据库设计BELONGS_TO
- 18. 数据库设计 - 与重复可能的一对一关系?
- 19. 数据库设计:与父表和父表关联的第三个表
- 20. 关系数据库设计:用于报表的重复属性
- 21. MySQL数据库设计 - 关系表
- 22. 关系数据库设计 - 拆分表
- 23. 关于数据库表格设计
- 24. 关于设计数据库
- 25. 关系数据库设计
- 26. 关于数据库设计
- 27. 关系数据库设计
- 28. 数据库设计/关系
- 29. 数据库设计关系
- 30. 数据库设计和弹性搜索
每行存储多少数据/列的大小/类型是多少?维基百科上的数据存储位对介绍数据存储/检索方式的页面和扩展区有很好的介绍。 http://en.wikipedia.org/wiki/Microsoft_SQL_Server – u07ch 2009-12-08 08:31:49