我有一个数据库表,其中包含一个已提交的应用程序表单的数据,该表单的预计负载为每年200万行。
有一个用自定义文本标记应用程序的选项,但这个功能可能只有5-10%的时间会被使用。稍后,可以通过此文本搜索到表单。
这应该作为主表上的可空属性实现,还是将其提取到只包含键和文本的单独表中更好?
发布于 2009-07-27 11:04:43
将可空的文本列放在单独的表中在许多方面都会更好
1)如果移动到单独的表中,它将不可为空
2)在语义上更优雅
3) back join的效率不会很低,因为您将在父表的PK上进行join,并且将使用所有概率的hash join。
4)如果您决定将来在每个应用程序中都有更多这样的可选列,那么它将是可扩展的。您可以查看类似于以下内容的设计:
应用程序(app#,date,...)
Application_Attachments(app#,text_col1)
发布于 2009-07-27 10:57:00
答案可能取决于您将使用的特定DBMS。例如,空文本列在DBMS上占用了多少空间?另外,这个文本列有多大-只有几个字符,或者可能有数千个字符?
对文本使用单独的表的一个可能的优点是,如果基于文本的搜索需要全表扫描(因为它只有5-10%的行数,并且这些行将比它们在单个表中的行数小),则基于文本的搜索可能更有效。但是,您必须在这一点与需要连接回主表以获取其他数据的事实之间进行权衡。
唯一确定的方法是以两种方式设置它并对其进行基准测试。
https://stackoverflow.com/questions/1187326
复制相似问题