这可能是一个奇怪的问题,但不知道如何研究它。执行以下查询时:
SELECT Foo.col1, Foo.col2, Foo.col3
FROM Foo
INNER JOIN Bar ON Foo.ID = Bar.BID
我倾向于使用TableName.Column
而不仅仅是col1, col2, col3
有任何性能差异吗?为每列指定表名是否更快?
我的猜测是,它更快,因为它需要一些时间来查找列名并区分它。
如果有人知道我可以阅读的链接,我将不胜感激。我甚至不知道如何更好地标题这个问题,因为不确定如何搜索它。
答案 0 :(得分:5)
首先:这无关紧要。查找列的时间是典型查询总处理时间的一小部分,这可能是寻找额外性能的错误点。
第二:Tablename.Colname
仅比Colname
更快,因为它无需搜索引用的表(以及类似于视图和子查询的类似表格的结构)拟合柱。再说一遍:区别在于统计噪音。
第三:使用Tablename.Colname
是一个好主意,但出于其他原因:如果您仅使用Colname
,则查询中的一个表会获得一个新列在同名的情况下,你最终得到了一个众所周知的“模糊列名”错误。这类专栏的典型候选人通常是“评论”,“最后改变”和朋友。如果您对col引用进行限定,则此可维护性问题就会消失 - 您的查询将始终工作,忽略新字段。
答案 1 :(得分:4)
如果它更快,差异肯定可以忽略不计,就像每个查询几微秒一样。有关查询中提到的表的所有数据都必须加载到内存中,因此不会保存任何磁盘访问。它是在查询解析期间完成的,而不是在数据处理期间完成的。即使您运行查询数千次,也可能无法弥补键入这些额外字符所花费的时间,当然也不是我们讨论它的时间。 :)
但它会使查询更长,因此在通信上花费的时间略多一些。如果您通过网络发送查询,则可能会否定解析过程中保存的任何时间。但是,您可以通过使用短表别名来减少这种情况:
SELECT t.col1, t.col2
FROM ReallyLongTableName t
作为一般规则,在担心数据库性能时,您只需关注时间取决于表中行大小的方面。任何与数据量无关的东西都会陷入噪音,除非你处理极小的表(在这种情况下,你为什么要打扰数据库 - 使用平面文件)。