選擇所有列()
詢問
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 的查詢計劃程式通常可以優化查詢。
優點:
- 新增/刪除列時,你無需在使用
SELECT *
的位置進行更改 - 寫的時間更短
- 你也看到了答案,那麼
SELECT *
的用法是否合理?
缺點:
- 你返回的資料超出了你的需要。假設你新增每行包含 200k 的 VARBINARY 列。你只需要在一個地方為單個記錄提供此資料 - 使用
SELECT *
你最終可以返回每 10 行不需要的 2MB - 明確使用什麼資料
- 指定列意味著刪除列時會出錯
- 查詢處理器必須做更多的工作 - 弄清楚表中存在哪些列(感謝 @vinodadhikary)
- 你可以更輕鬆地找到列的使用位置
- 如果使用 SELECT *,則會獲得連線中的所有列
- 你無法安全地使用序數引用(儘管使用列的序數引用本身就是不好的做法)
- 在使用
TEXT
欄位的複雜查詢中,查詢可能會因不太理想的臨時表處理而變慢