2010-06-10 25 views
1

假設我有一個表X,其中有100條記錄,運行select * from X需要100秒。我可以從數據庫分頁中獲得什麼性能提升?

我應該花多長時間查詢select top 10 * from X

我認爲這種關係或多或少是線性的,所以10秒。這是正確的,還是關係在某種程度上是非線性的?

+0

在第二個查詢中用你最喜歡的rdbms的分頁語法取代'top'。我只是在尋找一個「一般」的答案 – StevenWilkins 2010-06-10 17:10:47

回答

0

你的性能代價是在兩個不同的領域:

  • 需要多長時間來執行查詢
  • 需要多長時間來返回結果

通常情況下,查詢會快,但返回的結果會很慢,因爲它是I/O限制的。如果是這種情況,那麼通過返回更少的結果,您將看到近似線性的加速。

但是,如果查詢本身很複雜,情況就不同了。如果它不僅僅是select * from X,而是select * from X where [complicated-expression],那麼數據庫實現的結果可能會有很大差異。在這種情況下,您的性​​能可能會受到查詢複雜性的影響,在這種情況下,只會返回更少的結果,您看不到太多的好處。

+0

當然,你永遠不想在任何情況下使用select *。對於性能resons,除了你需要的列以外,不要返回任何列,如果你有一個連接,總是有你不需要的列。爲了維護,不要依賴select *,因爲當數據庫發生更改時,可能會導致事件中斷。例如,假設您在UNION查詢中使用了select *,並且只有一個union分支具有添加了additonal列的表。假設您向用戶顯示數據並添加了一個您不希望用戶看到的列? – HLGEM 2010-06-10 17:49:53

+0

夠公平的,謝謝。 @HLGEM好的提示。 – StevenWilkins 2010-06-11 13:23:23

相關問題