2012-06-11 72 views
3

我注意到的幾個查詢表上有很多列,當我做:選擇*時增加了多少時間?

SELECT column1, column2 FROM ... 

它幾乎可以2X一樣快,當我這樣做:

SELECT * FROM ... # ~ 15 columns 

什麼賬戶對於更多的時間才能返回*查詢?我最初認爲,如果兩個查詢都檢索相同的行,那麼性能上的差異將變得微不足道。什麼說明了這種差異?

回答

7

雖然行數是一樣的,額外的列需要傳輸到客戶端,消耗網絡帶寬。需要額外的時間,這是爲什麼下載一個文件大七倍的文件需要更長時間的原因。此外,還可能需要從磁盤中讀取的塊,可能沒有其他要求,並在某些情況下甚至無力只從索引讀取完成查詢。這就是爲什麼你被鼓勵總是明確指定你的選擇列表。

0

鑑於...

  1. SELECT column1, column2 FROM yourtable
  2. SELECT * FROM yourtable

MySQL的性能可以由一個以上的因素而改變,例如

  • 發送數據回客戶端,
  • 件釋放的物品,
  • 鎖定表(一個或多個),
  • 檢查查詢緩存,
  • 結果存儲到查詢高速緩衝存儲器,
  • 優化,
  • 打開和關閉表

...和幾個。試圖確定哪種方式更快時,您必須考慮所有這些因素。

在大多數情況下,我去查詢只有我想要的列,從而減少應用程序和數據庫服務器之間不必要的轉移負荷。但是......我不得不承認,如果只有幾列,或者如果我想要測試一些東西,我有時走SELECT * - 快捷方式了。