Chọn * là một mẫu đối tượng SQL. Nó không nên được sử dụng trong mã sản xuất vì nhiều lý do bao gồm:
Mất một chút thời gian để xử lý. Khi mọi thứ được chạy hàng triệu lần, những bit nhỏ đó có thể quan trọng. Một cơ sở dữ liệu chậm mà sự chậm chạp được gây ra bởi loại mã hóa cẩu thả này là loại khó nhất để điều chỉnh hiệu suất.
Điều đó có nghĩa là bạn có thể đang gửi nhiều dữ liệu hơn mức bạn cần gây ra cả tắc nghẽn mạng máy chủ và mạng. Nếu bạn có tham gia bên trong, cơ hội gửi nhiều dữ liệu hơn mức bạn cần là 100%.
Nó gây ra vấn đề bảo trì đặc biệt là khi bạn đã thêm các cột mới mà bạn không muốn thấy ở khắp mọi nơi. Hơn nữa nếu bạn có một cột mới, bạn có thể cần phải làm một cái gì đó để giao diện để xác định phải làm gì với cột đó.
Nó có thể phá vỡ quan điểm (Tôi biết điều này là đúng trong máy chủ SQL, nó có thể hoặc có thể không đúng trong mysql).
Nếu ai đó đủ ngớ ngẩn để xây dựng lại các bảng với các cột theo thứ tự khác nhau (bạn không nên làm điều đó nhưng nó xảy ra tất cả thời gian), tất cả các loại mã có thể bị hỏng. Mã đặc biệt cho một chèn ví dụ, nơi đột nhiên bạn đang đặt thành phố vào trường address_3 bởi vì không có chỉ định, cơ sở dữ liệu chỉ có thể đi theo thứ tự của các cột. Điều này là xấu đủ khi các loại dữ liệu thay đổi nhưng tồi tệ hơn khi các cột hoán đổi có cùng kiểu dữ liệu vì bạn có thể đi đôi khi chèn dữ liệu xấu là một mớ hỗn độn để làm sạch. Bạn cần phải quan tâm đến tính toàn vẹn của dữ liệu.
Nếu nó được sử dụng trong chèn, nó sẽ phá vỡ chèn nếu một cột mới được thêm vào trong một bảng nhưng không phải là cột khác.
Nó có thể làm hỏng trình kích hoạt. Vấn đề kích hoạt có thể khó chẩn đoán.
Thêm tất cả điều này vào thời gian cần để thêm vào tên cột (heck bạn thậm chí có thể có giao diện cho phép bạn kéo qua các tên cột (tôi biết mình làm trong SQL Server, tôi đặt cược ở đó Chúng ta hãy xem, "Tôi có thể gây ra vấn đề bảo trì, tôi có thể gây ra vấn đề hiệu suất và tôi có thể gây ra vấn đề toàn vẹn dữ liệu, nhưng hey tôi đã lưu năm phút của thời gian dev. . "thực sự chỉ cần đặt trong các cột cụ thể mà bạn muốn
tôi cũng đề nghị bạn đọc cuốn sách này:. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers-ebook/dp/B00A376BB2/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1389896688&sr=1-1&keywords=sql+antipatterns
Ngoại trừ một cột ... Tôi cho bạn biết cái nào nên bỏ qua, do đó INFORMATION_SCHEMA.columns là cách. – Alfabravo
Khám phá [câu trả lời này] (http://stackoverflow.com/questions/2365972/how-can-i-select-from-a-table-in-mysql-but-omit-certain-columns/13808457#13808457) nó làm những gì bạn muốn làm! – donL
53 cột? Tôi sẽ dính với SELECT * như Thomas gợi ý trong trường hợp đó ... trừ khi cột phụ đó có một lượng lớn dữ liệu mà sẽ không mong muốn để lấy ...? –