Mysql

推薦方式:同一張表中的“SELECT *”與“SELECT COLUMN_LIST”,多次

  • July 14, 2021

這個問題非常接近我想問的問題,但問題和答案都更側重於選擇隨機行。

由於一般規則是始終推薦“SELECT COLUMN_LIST”而不是“SELECT *”,因此我想知道推薦是否會隨著以下情況而改變。

場景: 從一個大約有 5 列的表中,如果我需要這 5 列的資訊,但在不同的步驟,

例如:就像在 Java 函式中一樣,在第 1 步,將使用前 2 列,在第 4 步,將使用第 3 列和第 4 列,在第 10 步,將使用第 5 列。

有兩種方法可以獲取這些資訊,

  1. 使用“SELECT *”進行 1 個 DB 呼叫,並在各個步驟提取所需資訊。
  2. 在步驟 1、步驟 4 和步驟 10 中使用“SELECT COLUMN_LIST”進行多次 DB 呼叫,在每次呼叫中僅獲取所需列的數據。

對於上述情況,推薦使用 2 種方法中的哪一種?

您忘記提及的第三個選項使用SELECT COLUMN_LIST. 我之所以提到這一點,是因為比較何時使用SELECT *vsSELECT COLUMN_LIST並不是真正關於一個數據庫呼叫的次數,而是關於模式一致性

不推薦的原因SELECT *是因為您從中選擇的數據集的架構可能會隨著時間的推移而發生變化,這可能會導致意外的結果和錯誤,尤其是在您作為消費者的應用程序中,它總是期望Column1成為Column1Column3成為第三列等。

即使未來的架構更改不會破壞應用程序,您仍然可能會遇到使用 的性能問題SELECT *,原因有兩個。一個是可能已經在數據集的末尾添加了額外的列,您現在不必要地為其帶回額外的數據。第二個原因是您可能會導致生成的查詢計劃不是最優的(例如,通常可以搜尋的索引現在可能不適用)。

最重要的是,正如前面在評論中提到的,指定列列表而不是使用SELECT *. 這是因為它明確地傳達了正在使用數據庫中的哪些欄位並幫助確定程式碼的意圖,尤其是對於可能無法訪問數據庫本身的開發人員。

還有許多其他原因,但這些是我想到的少數幾個重要的原因。相反,有一些邊緣情況可以使用而不是顯式列列表,您可以在我在這裡SELECT *提出的類似問題中找到其中一些範例。

引用自:https://dba.stackexchange.com/questions/295423