使用“AS”而不使用“AS”的别名

Sri*_*m M 7 sql-server

访问具有别名“AS”的表和不使用“AS”的表有什么区别。是否有任何性能增强?

例如 :

SELECT S.ID,S2.Value FROM dbo.Sample AS S
INNER JOIN dbo.Sample2 AS S2 ON 
S.ID = S2.ID;

SELECT S.ID,S2.Value FROM dbo.Sample S
INNER JOIN dbo.Sample2 S2 ON 
S.ID = S2.ID;
Run Code Online (Sandbox Code Playgroud)

1 和 2 有什么区别?

jyn*_*nus 8

假设 MySQL,如果你EXPLAIN EXTENDED在两个查询上执行,你会得到:

mysql> EXPLAIN EXTENDED SELECT S.ID,S2.Value FROM dbo.Sample AS S
    -> INNER JOIN dbo.Sample2 AS S2 ON 
    -> S.ID = S2.ID;
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
| id | select_type | table | type   | possible_keys | key  | key_len | ref      | rows | filtered | Extra       |
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
|  1 | SIMPLE      | S     | index  | ID            | ID   | 8       | NULL     |    1 |   100.00 | Using index |
|  1 | SIMPLE      | S2    | eq_ref | ID            | ID   | 8       | dbo.S.ID |    1 |   100.00 | NULL        |
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
2 rows in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: /* select#1 */ select `dbo`.`S`.`ID` AS `ID`,`dbo`.`S2`.`Value` AS `Value` from `dbo`.`Sample` `S` join `dbo`.`Sample2` `S2` where (`dbo`.`S2`.`ID` = `dbo`.`S`.`ID`)
1 row in set (0.00 sec)

mysql> EXPLAIN EXTENDED SELECT S.ID,S2.Value FROM dbo.Sample S
    -> INNER JOIN dbo.Sample2 S2 ON 
    -> S.ID = S2.ID;
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
| id | select_type | table | type   | possible_keys | key  | key_len | ref      | rows | filtered | Extra       |
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
|  1 | SIMPLE      | S     | index  | ID            | ID   | 8       | NULL     |    1 |   100.00 | Using index |
|  1 | SIMPLE      | S2    | eq_ref | ID            | ID   | 8       | dbo.S.ID |    1 |   100.00 | NULL        |
+----+-------------+-------+--------+---------------+------+---------+----------+------+----------+-------------+
2 rows in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: /* select#1 */ select `dbo`.`S`.`ID` AS `ID`,`dbo`.`S2`.`Value` AS `Value` from `dbo`.`Sample` `S` join `dbo`.`Sample2` `S2` where (`dbo`.`S2`.`ID` = `dbo`.`S`.`ID`)
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

EXPLAIN EXTENDED显示作为 a 执行的实际查询WARNING,一旦解析了别名、列名等。如您所见,发送到查询计划器的查询在解析后对于两种情况完全相同,因此它确认不会有任何性能差异。