2012-01-23 95 views

回答

6

在您的特定情況下,它很可能是相同,但作爲一個良好的做法,你應該總是指定你想要的列。

除了Dark Falcon發表評論的各種好理由之外,它還在應用程序代碼中創建了一種自我文檔形式,因爲它直接在查詢您期望的每個字段中。

+2

原因是當有人在將來插入一個新列時,它不會打破您希望列按特定順序排列的所有現有查詢。如果您不需要表中可能包含的所有當前和將來的列,它還會減少選定的數據量。 –

+0

@DarkFalcon完全相反,當你選擇*時,你會選擇新添加的字段,也不用擔心重寫查詢。根據現場秩序是愚蠢的。 –

+0

命名列的唯一好理由是,只有在需要的時候才能得到所需的代碼,並且如果代碼中存在更改,代碼將立即明確地停止。 –

1

Imho顯式版本會更快,導致mysql不需要查找表中包含的字段。

+0

無論如何,它必須進行查找以驗證關係是否存在。 –

0

根據表結構(包括索引),它可能沒有什麼區別 - 運行一些基準測試並使用EXPLAIN SELECT來查看可以改進的地方將會幫助您一路走下去。但總的來說,如果你知道你只需要n個字段,只需選擇n個字段。

0

只需指定它,以防將來添加更多列,但不想檢索所有列。無論如何,最好是具體的。

0

使用兩種方法編寫一個控制檯應用程序,執行兩種方法並循環1000次並打印出平均所用時間。這將是您測試性能的最快方式。

5

作爲一個良好的實踐,通常最好明確指定所需的列,而不管您在此問題中擔心的性能影響。

但是總的來說,答案將很大程度上取決於您的版本mysql。簡介一下,看看:

explain select * from ...; 
explain select specified from ...; 

我懷疑強烈,這是不成熟的優化的情況下,那你不真的需要知道這是更快。

0

一般來說它的更好,我想更快地指定你的SQL查詢的東西,以避免得到一些無用的數據

0

的「SELECT * FROM」爲quering當DBA你只是想要一個格式恕我直言,僅僅是一個快速的方法快速瀏覽桌子。即使這可以在編程中起作用,我也不會推薦它,通過將列列爲程序員,它不需要來回訪問數據庫並查看要使用或查詢的列。它讓你在一個地方..雖然只是我..這真的取決於你,你想如何編程。

0

您正在看這個貝司獎。你是否需要列的內容,如果你不知道,你會得到它,這將需要更長的時間。

解析sql來檢查列名,排序它們並且可能將它們別名,這相對於氾濫網絡傳輸你不需要的東西的負載而言是微不足道的。