简体   繁体   中英

How does table alias names affect performance?

While reading about tuning SQL queries, I read somewhere that 'Always use table alias and prefix all column names with the aliases when you are using more than one table.'

How does table alias names affect performance? Or Do they actually affect?

The alias doesn't affect performance in any practical or measurable way at all (italics added on edit). That is, it would add a barely (if it all) measurable delay to query compilation. Once compiled (and re-used), it has no effect.

An alias removes ambiguity when you have more than one table because you know which table it comes from. It also prevents future table changes from breaking a query. Say, you add an audit column to one table where it already exists in another table. Queries without aliases using both tables will break.

An alias is also mandatory in some cases eg schema bound views.

The SQL parsing engine (that reads all queries before executing them, and uses the information to cache the compiled queries in the future for faster execution) is the only thing that looks at the aliases, and uses it to help remove ambiguities in symbol lookups. The system would already produce symbols, just like any other compilable statement in any other language, when it's being parsed prior to execution-storage.

Almost not at all, the performance impact is negligible, but you'll have a much better time reading the query. It's just for your convenience.

The performance impact is allocating a few kb of memory to store alias names, etc. in the SQL Server program itself. Compared to the rest of the operations needed to execute your query, this is almost nothing.

It certainly can. I came here from Google and this was the first result. And all I can say is the accepted answer given here might be incorrect. And it all comes down to how you use aliases. In my case, ORM was generating an alias for every column in the table. And the performance decrease was significant. Double execution time to be precise.

PostgreSQL example version 15:


Query generated by ORM:

SELECT id AS id_0, uuid AS uuid_1, login AS login_2, service_status AS service_status_3, customer AS customer_4, cli AS cli_5, description AS description_6, address AS address_7, reference AS reference_8, postcode AS postcode_9, chain_id AS chain_id_10, interface_name AS interface_name_11, interface_ip AS interface_ip_12, tariff AS tariff_13, term_length AS term_length_14, contract_start_date AS contract_start_date_15, additional_data AS additional_data_16, observium_port_id AS observium_port_id_17, status AS status_18, location_lat AS location_lat_19, location_lon AS location_lon_20 FROM internet_service

Resulted in:

"Seq Scan on internet_service  (cost=0.00..106.03 rows=503 width=1493) (actual time=0.010..0.204 rows=503 loops=1)"
"Planning Time: 0.058 ms"
"Execution Time: 0.230 ms"

Query without generating aliases:

SELECT * FROM internet_service

Resulted in:

"Seq Scan on internet_service  (cost=0.00..106.03 rows=503 width=1493) (actual time=0.007..0.097 rows=503 loops=1)"
"Planning Time: 0.054 ms"
"Execution Time: 0.119 ms"

I have experience with alias the query take significantly more time compare to without alias.

I have experience this with PostgreSQL, my query are following.

Without Alias

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%';

With Alias

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%';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM