表别名如何影响性能?

时间:2011-12-02 21:46:36

标签: sql database performance

在阅读有关调优SQL查询的内容时,我在某处读到“当您使用多个表时,始终使用表别名并使用别名为所有列名添加前缀。”

表别名如何影响性能?或者他们真的会影响吗?

3 个答案:

答案 0 :(得分:39)

别名不会以任何实际或可衡量的方式影响性能 (编辑时添加斜体)。也就是说,它会在查询编译时添加几乎(如果全部)可测量的延迟。一旦编译(并重新使用),它就没有效果。

当您拥有多个表时,别名会消除歧义,因为您知道它来自哪个表。它还可以防止将来的表更改破坏查询。比如说,您将一个审计列添加到另一个表中已存在的表中。使用两个表而没有别名的查询将中断。

在某些情况下,别名也是强制性的,例如架构绑定视图。

SQL解析引擎(在执行它们之前读取所有查询,并在将来使用这些信息来缓存已编译的查询以便更快地执行)是查看别名的唯一方法,并使用它来帮助消除歧义符号查找。在执行存储之前对系统进行解析时,系统就会产生符号,就像任何其他语言中的任何其他可编译语句一样。

答案 1 :(得分:0)

几乎没有,性能影响可以忽略不计,但您可以更好地阅读查询。这只是为了您的方便。

性能影响是在SQL Server程序本身中分配几kb的内存来存储别名等。与执行查询所需的其他操作相比,这几乎没有。

答案 2 :(得分:0)

与没有别名相比,我对查询有更多的了解。

我在PostgreSQL上有经验,下面是我的查询。

没有别名

select applicant.application_id, form_data, application_defect.defect_id from applicant INNER JOIN audit_trail on applicant.email = audit_trail.email inner join application_defect on applicant.application_id = application_defect.application_id where application_defect.defect_id like '1%' and form_data like '%FaceApi%' ;  

使用别名

select ap.application_id, au.form_data, ad.defect_id from applicant ap INNER JOIN audit_trail au on ap.email = au.email inner join application_defect ad on ap.application_id = ap.application_id where ad.defect_id like '1%' and form_data like '%FaceApi%' ;