2012-05-09 33 views
5

Tôi tự hỏi, điều gì là nhanh nhất (hoặc nhẹ nhất cho cơ sở dữ liệu để xử lý)Cái nào nhanh hơn: "CHỌN * TỪ bảng" hoặc "TỪ x, y, q TỪ bảng" (từ một bảng có 4 trường)

Hãy nói rằng, bảng db có 4 lĩnh vực: x, y, z, q

tôi chỉ cần 3: x, y, q

cách gì là nhanh nhất/đơn giản nhất cho cơ sở dữ liệu để thực hiện (sử dụng PHP) .. "SELECT * FROM table" hoặc "SELECT x, y, q FROM table"?

Điều tương tự sẽ áp dụng nếu bảng có từ 5 trường trở lên trong khi tôi vẫn chỉ cần chọn 3?

+0

Suy nghĩ theo logic cơ bản nhất. Bạn có một túi với các loại quả bóng khác nhau. Có những người muốn chơi bóng rổ và bóng chuyền. Bạn chỉ có thể lấy bóng rổ và bóng chuyền, và để phần còn lại trong túi. Hoặc cách khác bạn chỉ có thể làm rỗng toàn bộ túi ra, lấy bóng rổ và bóng chuyền để đưa chúng ra, và để phần còn lại nằm. Cái nào sẽ dễ dàng hơn? – TheDeadLike

Trả lời

10

SELECT x,y,z FROM table nhanh hơn vì MySQL sẽ không phải tra cứu cột nào trong bảng của bạn trước khi thực hiện truy vấn.

+4

Và nếu các cột đó được lập chỉ mục, nó thậm chí sẽ không cần phải đọc từ chính bảng đó ... – eggyal

+0

Ok. Trong đầu của tôi nó trông dễ dàng hơn cho mysql để chỉ cần chọn tất cả, thay vì được cụ thể (và nhận mysql để tìm kiếm/sắp xếp cho các trường đó) – mowgli

+2

Nó sẽ vẫn phải tra cứu các cột để xác minh rằng x, y, z các cột hợp lệ cho bảng đó. –

3

Trong hầu hết các cơ sở dữ liệu, * chậm hơn so với chỉ định các trường.

Nó cũng là một thực hành lập trình tốt để đặt tất cả các cột, mặc dù chúng rất nhiều.

+0

Tại sao thực hành tốt? – mowgli

+3

@mowgli Thực hành tốt cho một vài lý do. 1) Nó xác định tốt hơn dữ liệu bạn thực sự đang sử dụng từ kết quả truy vấn của bạn, 2) Khi '*' sẽ lấy dữ liệu của tất cả các cột, nếu đôi khi trong tương lai ai đó thêm 200 cột vào bảng của bạn, bạn đột nhiên sẽ phải xử lý gấp 200 lần dữ liệu được chuyển mà ** sẽ ** tác động ** hiệu suất ** của bạn, ngay cả khi công việc của họ không liên quan gì đến truy vấn của bạn. Về cơ bản nó là nguyên tắc truy cập ít nhất hoặc đặc quyền ít nhất (http://en.wikipedia.org/wiki/Principle_of_least_privilege) –

3

SELECT x,y,q FROM table luôn nhanh hơn select * vì bạn không đọc tất cả các trường nhưng phải đề cập đến SELECT x,y,q,z FROM tableselect * sẽ có hiệu suất tương tự như hiệu quả.

Các vấn đề liên quan