2
表信息快20倍:甲骨文:ROW_NUMBER比ROWNUM
- table1的有20百萬個條目
- 表2有120個條目。
這些請求的目標是返回如果是或否有存在條目。條目的數量並不重要。
有沒有人解釋爲什麼
SELECT COUNT(rn) count
FROM
(
SELECT ROW_NUMBER() OVER (order by t2.id_field) AS rn
FROM table1 t1
INNER JOIN table2 t2 ON t2.id_table2 = t1.id_table2
WHERE t2.id_field = 2
)
WHERE rn < 2;
比快20倍:
SELECT COUNT(rn) count
FROM
(
SELECT 1 rn
FROM table1 t1
INNER JOIN table2 t2 ON t2.id_table2 = t1.id_table2
WHERE t2.id_field = 2
)
WHERE ROWNUM < 2;
你知道,那些是不等價的?第二個使用表的「隨機」排序來分配行號,而第一個使用定義的順序。執行計劃告訴你什麼? –
我懷疑優化器只是在優化確定性查詢方面更好,但沒有實際查詢計劃的東西只是猜測。 –
@a_horse_with_no_name我忘了注意這些請求的目的是要返回,如果是或否有存在的條目。條目的數量並不重要。 – sdespont