什么是更好的额外查询或数据库中的额外列?

时间:2009-11-13 08:48:34

标签: php mysql database

数据库中哪些更好的额外查询或额外列可用于将在非常短的时间内可用的数据。

示例:在子用户管理的情况下,我在主用户​​表中添加一个额外的列super_user_id,如果用户类型是sub_user并且默认列值为-1或者我在该表中创建新表并管理子用户,则生成enrty

但是在登录的情况下我必须在两个表中进行搜索,我必须再进行一次查询。

由于

5 个答案:

答案 0 :(得分:1)

没有一般性答案;你必须更加具体。我所能提供的只是一般原则。

在其他条件相同的情况下,出于多种原因,在没有冗余信息的情况下,使用规范化的数据库会更好。但有些情况下,冗余信息可能会节省您的程序很多时间。一个示例是使用Markdown格式化的文本:您需要存储原始标记以允许编辑,但是每次需要输出时格式化源可能会对系统造成极大的负担。因此,您可以添加一个冗余列来存储格式化的输出,并承担确保该列保持最新的额外责任。

我所了解的情况是,假设的额外列会保存查询。唯一正确的答案是,除非您知道保存一个查询的性能优势将弥补它,否则您应该保持表的清洁和最小化。请记住,过早优化是所有邪恶的根源 - 你可能会发现你的应用程序运行速度超过了足够快。如果在分析时发现额外查询是一个重大瓶颈,那么您可以考虑添加该列。

同样,如果不了解您的情况,就无法提供具体或具体的建议,但我希望我至少帮助您做出决定。

答案 1 :(得分:0)

您的意思是计算查询中的值与存储计算值吗?

这取决于更新的频率,数据的大小,需要的频率。可能没有理论上的最佳答案,您需要进行测试和分析。

答案 2 :(得分:0)

这取决于您通过添加列来添加到表中的冗余量。 通过适当的索引和设计连接可以更好地工作,因此无需担心在需要时进行标准化。

答案 3 :(得分:0)

使用第二个表格。 要求您发出两个查询。相反,您将发出单个查询将两个表连接在一起,或者更好的是,创建一个为您执行JOIN的VIEW:

SELECT usertable.col1, usertable.col2 superusertable.superuserid
    FROM usertable LEFT OUTER JOIN superusertable 
    ON usertable.userid = superusertable.userid

这允许您维护正确的规范化结构,帮助您在某些查询中(比如找出谁是超级用户),并允许数据库优化搜索问题。

答案 4 :(得分:-1)

执行其他查询总是需要更多时间。

在DB中添加额外的列不会产生任何重大影响,即使您应该有数千行。

Ergo,添加额外的列并保存DB trafic:)