我有一條在Oracle數據庫服務器上運行的語句。聲明有大約5個連接,並且沒有什麼不尋常的。它看起來很像如下:使用Oracle提示「FIRST_ROWS」提高Oracle數據庫性能
SELECT field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
的問題(什麼是有趣的)是用戶ID的發言= 1需要1秒鐘,返回590條記錄。用戶ID = 2的語句大約需要30秒才能返回70條記錄。
我不明白爲什麼差異那麼大。
看來,不同的執行計劃選擇與用戶ID = 1和用戶ID不同的語句= 2
我實施了Oracle提示FIRST_ROW,性能變得更好顯著後。這兩個陳述(對於ids 1和2)都會在1秒內產生回報。
SELECT /*+ FIRST_ROWS */
field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
問題:
1)什麼是糟糕的表現可能的原因當用戶ID = 2(在不使用提示)?
2)爲什麼一個vs另一個語句的執行計劃會不同(當不使用提示時)?
3)在決定將這個提示添加到我的查詢中時,有什麼需要注意的地方?
感謝
您的餐桌統計信息是否最新且準確? – Tebbe
運行性能比較時請注意緩存。 – tbone
Tebbe - 統計信息是最新的。他們是否準確,我不知道。 – bobetko