Đối với các câu hỏi về chỉ mục, một chỉ mục không chỉ là mong muốn mà còn cần thiết để "tăng tốc" mọi thứ. Theo tôi hiểu (theo thuật ngữ "không chuyên"), chức năng của chỉ mục là tăng tốc độ tìm kiếm và khôi phục dữ liệu bên trong bảng.
Lý do sử dụng chỉ mục:
- Xác định duy nhất từng hàng trên mỗi bảng (sau cùng, khóa chính là một chỉ mục)
- Các chỉ mục được sắp xếp (ngay cả khi không phải là dữ liệu)
- Tăng tốc độ tìm kiếm và bộ lọc:Chỉ mục giúp cho việc khôi phục dữ liệu nhanh hơn, vì nó "nắm giữ" vị trí của dữ liệu trong bảng (nó "xác định" dữ liệu bạn muốn khôi phục). Ngoài ra, nó giúp công cụ cơ sở dữ liệu lọc dữ liệu dễ dàng hơn (lọc được sắp xếp luôn nhanh hơn và đơn giản hơn dữ liệu hơn xáo trộn dữ liệu)
- Tối ưu hóa cách phục hồi dữ liệu khi sử dụng các bảng có liên quan:Mọi khóa ngoại phải được lập chỉ mục để tăng tốc các truy vấn liên quan đến quan hệ chính - khóa ngoại
Một số "quy tắc ngón tay cái" mà tôi sử dụng để quyết định trường nào cần được lập chỉ mục:
- Mọi khóa chính đều được lập chỉ mục ( hiển nhiên một:khóa chính phải là duy nhất và không được rỗng)
- Mọi khóa ngoại phải được lập chỉ mục (để làm cho quan hệ chính - khóa ngoại hiệu quả)
- Mọi trường số hoặc ngày mà tôi cần thực hiện tìm kiếm phải được lập chỉ mục. Điều đó nói rằng, tôi cố gắng tránh
double
Các trường (hoặc bất kỳ loại số dấu chấm động nào khác) sẽ được lập chỉ mục, vì chúng thường được sử dụng để lưu trữ các giá trị không dùng để tìm kiếm. - Mọi
char
hoặcvarchar
trường mà tôi cần thực hiện tìm kiếm phải được lập chỉ mục. Cố gắng tránh lập chỉ mục trêntext
vì chúng có thể chứa đựng những giá trị rất lớn trong đó. - Tránh lập chỉ mục nhị phân (
blob
) lĩnh vực ... không có ý nghĩa gì cả - Không rơi vào cám dỗ của việc lập chỉ mục mọi thứ. Hãy dành thời gian của bạn để quyết định trường nào phải được lập chỉ mục và trường nào không được được lập chỉ mục.