Mysql 联接-在列名之前添加表名是一种好的做法吗?

Mysql 联接-在列名之前添加表名是一种好的做法吗?,mysql,performance,Mysql,Performance,在oracle的一本书中,我读到当我们通过连接两个或多个表来执行SELECT时,如果在列名SELECT之前使用了tablename,则SELECT的工作速度会更快。 例如: 选择table1.name,table1.dob….而不是选择name,dob…. 在MySQL中也是这样吗 编辑 我知道,当字段名相同时,这是一个很好的做法。即使没有相同的字段名,我也会考虑性能的角度,但这是一种很好的做法,尤其是在连接表时。例如,联接的表可能具有相同的字段名,然后查询将失败。如果表名太长,也可以使用别名:

在oracle的一本书中,我读到当我们通过连接两个或多个表来执行SELECT时,如果在列名SELECT之前使用了tablename,则SELECT的工作速度会更快。
例如:
选择table1.name,table1.dob….
而不是
选择name,dob….

在MySQL中也是这样吗

编辑


我知道,当字段名相同时,这是一个很好的做法。即使没有相同的字段名,我也会考虑性能的角度,但这是一种很好的做法,尤其是在连接表时。例如,联接的表可能具有相同的字段名,然后查询将失败。如果表名太长,也可以使用别名:

SELECT t1.name, t2.dob FROM table1 t1 JOIN table t2 ON ...

从效率的角度来看,Oracle和MySQL在执行SQL之前将SQL编译成一个内部表示形式,因此我认为执行时间不会有显著差异,因为如果没有指定字段名称,它们将根据字段名称决定表。时间差将出现在编译时,在编译时,他们会推断出每个字段的表


事实上,我个人怀疑,如果指定了表名,Oracle执行速度会更快

当字段名相同时,这不是一个好的做法,它一直是一个好的做法。这与效率无关,而是当其他人向一个名称重叠的联接表中添加字段时,您的查询不会中断,因此您的内容在六个月内就能工作,而不仅仅是今天。

当然
解释
给出了同样的结果plan@triclosan你能解释一下吗。我没有让您完全运行
explain first\u query
explain second\u query
并比较结果从逻辑上考虑,它应该更快,因为RDBMS不需要检查每个表来找到哪个表包含所需的列;但是成本几乎可以忽略不计——除非您将数百个表和数千个列连接在一起,否则您可能只会为自己节省几分之一毫秒的时间。也就是说,我倾向于包含表限定符,以便查询对任何其他人类读者来说都是清晰的。@triclosan我不知道
explain
语法。非常感谢您指出,当有相同的字段名时,这是一个很好的实践。我想的是性能观点,即使没有相同的字段名称是的,事实上,我不知道性能观点,但我认为差异可以忽略不计。你做过一些基准测试吗?当有相同的字段名时,这是一个很好的实践。我想的是性能的观点,即使没有相同的字段名