爲了序言,我知道(應該如此!)在生產中使用SELECT *
是不好的,但我維護着其他人編寫的腳本。而且,我也意識到這個問題在具體情況上很低......但是假設的情況。假設的性能良率不使用SELECT *
比方說,我有一個腳本,從20個字段的表中選擇一切。讓我們說典型的客戶信息。
然後讓我們說,作爲一名優秀的開發人員,我將SELECT *
縮短爲實際使用的13個特定字段中的SELECT
。
通過明確列出字段與SELECT *
相比,我可以期待什麼類型的性能優勢(如果有的話)?
我會這麼說,這兩個查詢都利用了相同的確切索引。如果您想知道,更具體的查詢無法訪問其他查詢無法使用的覆蓋索引。
我不期待奇蹟,就像添加一個針對更具體查詢的索引一樣。我是在想。
您是否嘗試先運行Non-Key或Key查詢,以確保它們與'*'相比沒有緩存好處?令人驚訝的是差異如此之大。 – 2010-10-05 22:28:23
考慮到非關鍵列在第2次運行中比關鍵列回來要快得多(假設這不是錯字),我認爲緩存與速度的某些差異有關。 – 2010-10-05 23:00:24
@Jonathan:我以不同的順序多次運行它們,以避免因緩存而導致誤導結果。我連續兩次跑每一個,看看我是否會第二次得到不同的結果等。除了緩存另一個明顯的問題是什麼碰巧同時觸及數據庫。我當然不會聲稱我在這裏的結果是明確的 - 只是有趣的。 – Jay 2010-10-06 14:06:58