選擇所有列()

詢問

SELECT * FROM stack;

結果

+------+----------+----------+
| `id`   | username | password |
+------+----------+----------+
|    1 | admin    | admin    |
|    2 | stack    | stack    |
+------+----------+----------+
2 rows in set (0.00 sec)

你可以通過執行以下操作從聯接中的一個表中選擇所有列:

SELECT stack.* FROM stack JOIN Overflow ON stack.id = Overflow.id;

最佳實踐除非你正在除錯或將行提取到關聯陣列中,否則不要使用*,否則架構更改(ADD / DROP /重排列)可能會導致令人討厭的應用程式錯誤。此外,如果你在結果集中提供所需的列列表,MySQL 的查詢計劃程式通常可以優化查詢。

優點:

  1. 新增/刪除列時,你無需在使用 SELECT *的位置進行更改
  2. 寫的時間更短
  3. 你也看到了答案,那麼 SELECT *的用法是否合理?

缺點:

  1. 你返回的資料超出了你的需要。假設你新增每行包含 200k 的 VARBINARY 列。你只需要在一個地方為單個記錄提供此資料 - 使用 SELECT *你最終可以返回每 10 行不需要的 2MB
  2. 明確使用什麼資料
  3. 指定列意味著刪除列時會出錯
  4. 查詢處理器必須做更多的工作 - 弄清楚表中存在哪些列(感謝 @vinodadhikary)
  5. 你可以更輕鬆地找到列的使用位置
  6. 如果使用 SELECT *,則會獲得連線中的所有列
  7. 你無法安全地使用序數引用(儘管使用列的序數引用本身就是不好的做法)
  8. 在使用 TEXT 欄位的複雜查詢中,查詢可能會因不太理想的臨時表處理而變慢