Tôi sẽ mạo hiểm để nói không lên phía trước về mặt bảng. Tuy nhiên, thứ tự của các trường trong một chỉ mục và số lượng các trường trong WHERE là một vấn đề lớn.
Ví dụ: Bạn có bảng sau:
CREATE TABLE testtable
(
a INT,
b INT,
c INT,
KEY (a,b,c)
);
Lưu ý truy vấn này:
SELECT * FROM testtable WHERE a=1 AND b=2 AND c=3;
Vì mỗi cột trong mệnh đề WHERE được đề cập dưới dạng eq numf, còn gọi là tham chiếu đẳng thức (bằng cách sử dụng =), nên chỉ mục có thể được sử dụng bằng 0 trên một cột.
Lưu ý truy vấn này:
SELECT * FROM testtable WHERE a=1 AND b>2 AND c=3;
Cột a ở phía trước chỉ mục dưới dạng eq numf, nhưng Cột b thì không. Đây là một truy vấn phạm vi. Tùy thuộc vào số lượng thẻ của Cột a (số lượng thẻ hiển thị trong CHỈ SỐ SHOW TỪ kiểm tra), quét chỉ mục nếu số lượng thẻ của a = 1 rất thấp và tổng số hàng có Cột a = 1 nhỏ hơn 5% số lượng hàng trong testtable, nếu không, quét toàn bộ bảng được chọn bởi bất kỳ Trình tối ưu hóa truy vấn nào (MySQL, Oracle, PostgreQuery, SQL Server, v.v.).
Lưu ý truy vấn này:
SELECT * FROM testtable WHERE b=>2 AND c=3;
Mệnh đề WHERE này không bao giờ đề cập đến Cột a. Kết quả? tự động quét toàn bộ bảng.
Theo thứ tự các cột trong một bảng, việc chống phân mảnh các bảng và tạo các định dạng bảng với độ dài hàng cố định có thể làm giảm bất kỳ vấn đề nào có thể xảy ra với thứ tự cột bảng là một mối quan tâm đáng ngờ.
Nếu bất cứ ai biết về các vấn đề với Oracle, PostgreSQL, SQL Server hoặc thứ tự cột liên quan đến RDBMS khác, vui lòng bấm vào.