访问具有别名“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 有什么区别?
假设 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
,一旦解析了别名、列名等。如您所见,发送到查询计划器的查询在解析后对于两种情况完全相同,因此它确认不会有任何性能差异。
归档时间: |
|
查看次数: |
10896 次 |
最近记录: |