2012-07-24 36 views

回答

7

當您需要每隔列,當前和未來,考慮到一些可能被添加或刪除。

通常情況下,這是完全需要的數據庫信息,如架構利斯特,或者如果你正在做分析,試圖找出你所需要的信息實際上僅駐留工裝的情況。

這幾乎是從來沒有需要的「真正」的應用程序,應該只知道,並要求,他們需要什麼。

你不希望你的應用程序中落下一個尖叫堆只是因爲數據庫的其他一些用戶決定他們需要42加每行2GB BLOB列:-)

0

通常它只事項如果你正在移動大量的數據,那麼你的吞吐量就會變得越來越大。

我用它與頻率,因爲它使變更表,只要你的應用程序原型而言無痛的。

至於處理,也不要緊 - 可言,由於MySQL的性質。

所以不要擔心。

+1

哼哼......不確定'SELECT *'是個好主意,*特別是*當您定期更改表格時。 – Bruno 2012-07-24 02:24:42

+0

但是,如果你正在原型化自己的應用程序,那麼你會知道你使用的是什麼字段。例如,在foreach()中,無論如何你只使用某些字段。我並不是說所有情況都需要保證SELECT *:我多次說這是完全不相關的。 – David 2012-07-24 02:26:49

+0

這取決於可用的API,如果您根據列索引而不是列名得到列,則可能導致錯誤的代碼。一般來說這是不好的做法(儘管不像沒有列名的INSERT那樣糟糕)。 – Bruno 2012-07-24 02:28:58

0

如果使用它能夠自動拉列名和所有的名字隨後在應用程序中進一步使用映射的代碼,你可以逃脫使用SELECT *

然而,它通常是一個壞主意,因爲它可能是很有誘惑力的假設您想要檢索的列的位置(具體取決於您使用DB API,它可以被索引爲基礎的,而不是基於域名的) 。爲了便於閱讀,最好還是明確寫下你想要檢索的內容。

使用SELECT *時,有可能導致問題的幾件事情:

  • 如果列標籤沒有明確的界定(如SUM(...)或其他操作從視圖或CTE來),
  • 如果選擇中的多個列具有相同的名稱(例如,帶有AS子句的聯合或視圖/ CTE)。

Java的ResultSet說以下有關名稱:

值可以使用任一列的索引號或 列的名稱進行檢索。一般來說,使用列索引將更有效率爲 。

[...]

當吸氣劑的方法被調用,列名和 具有相同的名稱的多個列中,第一匹配列的值將被返回 。列名選項設計用於在生成結果集的SQL查詢中使用名稱列 。對於在查詢中未明確命名的 列,最好使用 列號。如果使用列名稱,編程人員應小心謹慎,以確保它們唯一引用可通過SQL AS子句保證的預期列 。

+0

這似乎更多的是一個糟糕的Java編程實踐尾巴搖擺SQL服務器狗 – podiluska 2012-07-24 05:15:29

+0

@podiluska,你是什麼意思?通過行中的索引檢索值並不特定於Java。這只是一個例子。 – Bruno 2012-07-24 10:36:31

+0

@podiluska,沒有我的論點是不使用'SELECT *',因爲你不知道你得到了什麼,程序員可能有很好的理由來使用'result [2]'(例如Java中的性能,在文檔或相同的列名中,當程序員不控制表時更是如此)。 – Bruno 2012-07-24 10:54:54

相關問題