-1
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)
查詢(2)的任何輸出都是查詢(1)的有效輸出(相反不成立),因此Postgresql可以選擇爲(1)提供與(2)相同的輸出,因此執行的操作相同計劃。 –
當然,他們使用相同的計劃,因爲他們正在做同樣的事情。 –
SQL是***聲明式***而非***勢在必行***。這意味着SQL沒有執行,它是一種允許你表達問題空間的語言,數據庫引擎從那個問題聲明中產生一個計劃*(它選擇自己的方式來解決它,通常使用成本估計)* 。在你的例子中,兩個SQL語句都是相同的問題,所以可以用同樣的方法解決。 – MatBailie