2011-08-09 30 views
7

Vì vậy, tôi luôn nghĩ rằng việc xem "Sử dụng ở đâu" trong cột phụ là một điều tốt. Tuy nhiên, tôi đã lên kế hoạch cho một bữa trưa túi màu nâu cho đồng nghiệp của mình trong việc giải thích EXPLAIN và bây giờ tôi không chắc lắm. Tài liệu MySQL nói điều này trong các ghi chú về "Sử dụng ở đâu":Tối ưu hóa MySQL: GIẢI THÍCH "Thêm" cột chứa "Sử dụng ở đâu"

Mệnh đề WHERE được sử dụng để hạn chế những hàng nào khớp với bảng tiếp theo hoặc gửi cho khách hàng. Trừ khi bạn có ý định cụ thể để tìm nạp hoặc kiểm tra tất cả các hàng từ bảng, bạn có thể có điều gì đó sai trong truy vấn của bạn nếu giá trị Extra không sử dụng ở đâu và kiểu nối bảng là TẤT CẢ hoặc chỉ mục. Thậm chí nếu bạn đang sử dụng chỉ mục cho tất cả các phần của mệnh đề WHERE, bạn có thể thấy Sử dụng vị trí nếu cột có thể là NULL.

Điều này khiến tôi tin rằng ngay cả khi mệnh đề WHERE chỉ chứa các phần của chỉ mục, MySQL vẫn sẽ kiểm tra các hàng nếu cột có giá trị NULL.

Điều đó có đúng không? Nếu vậy, tôi nên thay đổi các cột để không bao gồm NULL nếu tôi không cần nó? Tôi có thấy tăng tốc không?

+0

tôi vừa thực hiện kiểm tra: thay đổi cột từ null thành không null sau đó "sử dụng vị trí" biến mất. – tomwang1013

Trả lời

5

Cột có thể bỏ qua không có phí, vì cần phải kiểm tra điều kiện rỗng. nếu một cột không phải là null, hoặc yêu cầu của bạn không cho phép null, thì chắc chắn làm cho cột not null.

Đối với các chỉ mục, phụ thuộc vào việc xây dựng chỉ mục. Nếu chỉ mục được xác định bằng (a,b,c) và bạn đang sử dụng b,c trong mệnh đề where, bạn không thể sử dụng chỉ mục này làm a không hoạt động.

+0

Xin chào @Marc, cảm ơn bạn đã trả lời. Tôi hiểu cách các chỉ mục nhiều phần hoạt động. Tôi đoán những gì tôi yêu cầu là: nếu tôi có một bảng với chỉ mục (a, b, c) và một truy vấn như "chọn a, b, c từ bảng nơi a =? Và b =? Và c =?" và cột c là nullable, không MySQL vẫn phải kiểm tra mỗi hàng, hoặc không chỉ số giải quyết các truy vấn đầy đủ? –

+0

nó có thể lọc một phần dựa trên a/b, nhưng vẫn phải thực hiện thêm công việc với C để kiểm tra các giá trị rỗng. hiệu quả hơn không chỉ mục, chắc chắn, nhưng không hiệu quả nếu cả ba cột đều không có giá trị. –

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