2012-05-09 72 views
5

我想知道,什麼是最快(或最輕的數據庫處理)哪個更快:「SELECT * FROM table」或「SELECT x,y,q FROM table」(來自具有4個字段的表)

比方說,db表中有4個領域:X,Y,Z,q

我只需要3:X,Y,q

什麼方式最快/最簡單的數據庫來執行(使用PHP).. 「SELECT * FROM table」或「SELECT x,y,q FROM table」?

如果表中有5個或更多的字段,我仍然只需要選擇3,這同樣適用嗎?

+0

按最基本的邏輯思考。你有一個不同種類的球包。有人想打籃球和排球。你可以拿出籃球和排球,然後把剩下的放在包裏。或者,您也可以將整個袋子倒空,取出籃球和排球把它們交出來,剩下的就放下。哪一個會更容易? – TheDeadLike

回答

10

SELECT x,y,z FROM table更快,因爲在執行查詢之前,MySQL不必查找表中的列。

+4

如果這些列被索引,它甚至不需要從表中讀取... – eggyal

+0

好的。在我看來,mysql只是簡單地選擇它,而不是特定的(並且讓mysql搜索/排序這些字段) – mowgli

+2

它仍然需要查找列以驗證x,y,z是否是該表的有效列。 –

3

在大多數數據庫中,*比指定字段慢。

儘管它們很多,但將所有列放在一起也是一種很好的編程習慣。

+0

爲什麼這是一個很好的做法? – mowgli

+3

@mowgli這是一個很好的做法,有幾個原因。 1)它能夠更好地識別你實際使用的查詢結果中的數據,2)由於'*'將檢索所有列的數據,如果將來有人在你的表中增加200個額外的列,你會突然必須處理200倍的數據傳輸,這將**影響**你的**性能,即使他們的工作與你的查詢無關。基本上它是最少訪問或最小特權的原則(http://en.wikipedia.org/wiki/Principle_of_least_privilege) –

3

SELECT x,y,q FROM table總是比select *更快,因爲您沒有閱讀所有字段,但提及SELECT x,y,q,z FROM tableselect *會具有相同的效果表現。

相關問題