2009-11-12 205 views

回答

7

只選擇你需要的字段通常會更快 - 特別是如果這些字段被索引「覆蓋」,以便數據庫只需要從索引而不是從主表中加載數據(從而允許它獲取更少的頁面)。

3

只選擇你所需要的更快,這適用於列和where子句。

+0

我會謹慎對待有關WHERE子句的一般性陳述。可能會出現邊界情況,使WHERE子句導致非常奇怪的訪問路徑,這可能比讀取整個表更慢。我不認爲這會發生在限制列。 – Thilo 2009-11-12 09:21:02

+0

一致。但總的來說,限制返回的數據是一種更好的方法。 – 2009-11-12 09:33:53

0

選擇你需要的字段更快,因爲它帶來的數據更少。這是提高查詢性能速度的一般建議。

-2

如果您多次訪問表格,選擇所有列的速度會更快,並且具有更多硬解析的開銷比選擇更多列的開銷要大。

E.g.可以說你有一個表foobar列a..c,所有的CHAR(1);然後陳述

SELECT a,b,c FROM foobar; 
SELECT a,b FROM foobar; 
SELECT a,c FROM foobar; 
SELECT a FROM foobar; 
SELECT b,c FROM foobar; 
SELECT b FROM foobar; 
SELECT c FROM foobar; 

下列順序可能會比執行

SELECT * FROM foobar; 

七次慢。

+0

是的,但七個不同的版本也將被緩存,一旦你第二次「選擇c從foobar」它也將是一個軟解析。 – Thilo 2009-11-12 09:46:40

+0

Thilo:當然。一般來說,我會在優化任何事情之前測量性能。 – 2009-11-12 11:13:36

+0

這是一個糟糕的,人爲的例子。切勿使用SELECT *。 – gbn 2009-11-12 12:53:20

1

在將來添加列時,SELECT *會特別危險。假設你有一個需要UserID和LastLogon日期的例程。最後你在桌面上添加一個UserNotes文本列和Bang!這個小程序現在也會拉動一些文本數據,整個應用程序的性能將會下降,並且整個應用程序中的每個Select語句都需要修復才能解決問題!

只需選擇應用程序需要的列:)