Không, bạn không lập chỉ mục tất cả các cột. Bạn lập chỉ mục các cột liên quan cụ thể đến WHERE
và đôi khi nếu chúng liên quan đến một ORDER BY
.
Trong trường hợp này, bạn muốn có một chỉ mục trên type
:
SELECT name FROM users WHERE type='admin'
Trong trường hợp này, bạn muốn một chỉ mục trên active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
Trong trường hợp này, bạn có thể muốn một chỉ mục trên active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Bạn càng thêm nhiều chỉ mục thì ghi chậm hơn nhưng đọc sẽ nhanh hơn. Đây là một sự đánh đổi kinh điển. Đánh giá cẩn thận những chỉ số bạn cần và chỉ áp dụng chúng nếu có lợi ích hữu hình. Đừng chỉ tát họ vì bạn cảm thấy như họ nên ở đó.
Trên các bảng siêu nhỏ, những bảng có <1000 hàng, chỉ mục sẽ không giúp ích nhiều vì việc quét bảng sẽ không mất nhiều thời gian. Đối với bất kỳ điều gì không tầm thường, chúng đều rất cần thiết.
Nếu bạn đang gặp vấn đề về hiệu suất, tôi khuyên bạn nên cho rằng lược đồ của bạn là trở ngại lớn nhất, không phải là việc thiếu chỉ mục.