以下提到的查询的内部流程是什么?

时间:2019-11-20 23:51:10

标签: sql database oracle

Select * from table t1 inner join table t2 on t1.id=t2.id

Select * from table t1,table t2 where t1.id=t2.id
  

根据效果,哪个查询是乐观查询?

2 个答案:

答案 0 :(得分:2)

第一个查询使用标准ANSI联接,第二个查询使用旧式显式联接。

推荐使用标准ANSI连接,因为它更简洁,更简洁。

两个查询之间没有区别。

两者都会产生相同的输出,并且在性能方面不会有差异。

干杯!

答案 1 :(得分:2)

create table t1 (id int primary key);
create table t2 (id int primary key);

explain select * from t1 inner join t2 on t1.id = t2.id;
id | select_type | table | partitions | type   | possible_keys | key     | key_len | ref                               | rows | filtered | Extra      
-: | :---------- | :---- | :--------- | :----- | :------------ | :------ | :------ | :-------------------------------- | ---: | -------: | :----------
 1 | SIMPLE      | t1    | null       | index  | PRIMARY       | PRIMARY | 4       | null                              |    1 |   100.00 | Using index
 1 | SIMPLE      | t2    | null       | eq_ref | PRIMARY       | PRIMARY | 4       | fiddle_NTBFHZQPZPTPOTLPGUEV.t1.id |    1 |   100.00 | Using index
explain select * from t1, t2 where t1.id = t2.id;
id | select_type | table | partitions | type   | possible_keys | key     | key_len | ref                               | rows | filtered | Extra      
-: | :---------- | :---- | :--------- | :----- | :------------ | :------ | :------ | :-------------------------------- | ---: | -------: | :----------
 1 | SIMPLE      | t1    | null       | index  | PRIMARY       | PRIMARY | 4       | null                              |    1 |   100.00 | Using index
 1 | SIMPLE      | t2    | null       | eq_ref | PRIMARY       | PRIMARY | 4       | fiddle_NTBFHZQPZPTPOTLPGUEV.t1.id |    1 |   100.00 | Using index

db <>提琴here

这两个查询在功能上都是相同的(它们产生相同的结果),并且优化程序为它们两个都产生相同的解释计划(至少在这个简单的cas中,也许在更复杂的查询中)。

但是,大多数SQL专家会告诉您,隐式连接语法(在from子句中使用逗号)的处理更为复杂,并且自1992年以来,ANSI SQL标准建议使用显式连接( join ... on ...语法)。我强烈建议您遵循该建议。

相关阅读: