-1
쿼리 1 :Postgresql 다른 쿼리 이유는 무엇입니까?
select c_bh,c_xzdm,c_twhbm,d_tjrq
from (
select c_bh,c_xzdm,c_twhbm,d_tjrq
from t_table
order by d_tjrq desc
) t1
limit 10
쿼리 2
select c_bh,c_xzdm,c_twhbm,d_tjrq
from t_table
order by d_tjrq desc
limit 10
동일한 계획 :이 최적화 될 수 있도록 첫 번째 경우
Limit (cost=0.44..18.79 rows=10 width=59)
-> Index Scan using i_t_table_d_tjrq on t_table (cost=0.44..32135085.58 rows=17507700 width=59)
query (2)의 출력은 query (1)의 유효한 출력이며 반대는 사실이 아니므로 PostgreSQL은 (2)와 동일한 출력을 줄 수 있으므로 동일한 실행을 선택할 수 있습니다 계획. –
물론 그들은 같은 일을하고 있기 때문에 같은 계획을 사용합니다. –
SQL은 *** 선언적 ***이 아닌 *** 명령 ***입니다. 이것은 SQL이 실행되지 않는다는 것을 의미합니다. 문제 공간을 표현할 수있는 언어입니다. 데이터베이스 엔진은 문제를 선언하여 계획을 생성합니다. * (일반적으로 비용 추정을 사용하여 해결 방법을 선택합니다.) * . 귀하의 예제에서 두 SQL 문은 같은 문제에 해당하므로 동일한 방법으로 해결할 수 있습니다. – MatBailie