Bạn chắc chắn nên dành một chút thời gian để đọc về lập chỉ mục, có rất nhiều điều được viết về nó và điều quan trọng là phải hiểu những gì đang xảy ra.
Nói rộng ra, một chỉ mục áp đặt một thứ tự trên các hàng của bảng.
Để đơn giản, hãy tưởng tượng một bảng chỉ là một tệp CSV lớn. Bất cứ khi nào một hàng được chèn, nó được chèn vào cuối . Vì vậy, thứ tự "tự nhiên" của bảng chỉ là thứ tự các hàng được chèn vào.
Hãy tưởng tượng bạn đã tải tệp CSV đó trong một ứng dụng bảng tính rất thô sơ. Tất cả các bảng tính này hiện là hiển thị dữ liệu và đánh số các hàng theo thứ tự liên tiếp.
Bây giờ hãy tưởng tượng rằng bạn cần tìm tất cả các hàng có giá trị "M" trong cột thứ ba. Cho những gì bạn có sẵn, bạn chỉ có một lựa chọn. Bạn quét bảng kiểm tra giá trị của cột thứ ba cho mỗi hàng. Nếu bạn có nhiều hàng, phương pháp này ("quét bảng") có thể mất nhiều thời gian!
Bây giờ hãy tưởng tượng rằng ngoài bảng này, bạn đã có một chỉ mục. Chỉ số cụ thể này là chỉ số của các giá trị trong cột thứ ba. Chỉ mục liệt kê tất cả các giá trị từ cột thứ ba, theo một số thứ tự có ý nghĩa (giả sử theo bảng chữ cái) và cho mỗi giá trị, cung cấp một danh sách các số hàng nơi giá trị đó xuất hiện.
Bây giờ bạn có một chiến lược tốt để tìm tất cả các hàng trong đó giá trị của cột thứ ba là "M". Chẳng hạn, bạn có thể thực hiện tìm kiếm nhị phân ! Trong khi quét bảng yêu cầu bạn xem N hàng (trong đó N là số hàng), tìm kiếm nhị phân chỉ yêu cầu bạn xem các mục chỉ mục log-n, trong trường hợp xấu nhất. Wow, chắc chắn dễ dàng hơn nhiều!
Tất nhiên, nếu bạn có chỉ mục này và bạn đang thêm các hàng vào bảng (cuối cùng, vì đó là cách bảng khái niệm của chúng tôi hoạt động), bạn cần cập nhật chỉ mục mỗi lần. Vì vậy, bạn làm thêm một chút trong khi bạn đang viết các hàng mới, nhưng bạn tiết kiệm được rất nhiều thời gian khi bạn đang tìm kiếm thứ gì đó.
Vì vậy, nói chung, lập chỉ mục tạo ra sự đánh đổi giữa hiệu quả đọc và hiệu quả ghi. Không có chỉ mục, các phần chèn có thể rất nhanh - công cụ cơ sở dữ liệu chỉ cần thêm một hàng vào bảng. Khi bạn thêm chỉ mục, công cụ phải cập nhật từng chỉ mục trong khi thực hiện thao tác chèn.
Mặt khác, việc đọc trở nên nhanh hơn rất nhiều.
Hy vọng rằng bao gồm hai câu hỏi đầu tiên của bạn (như những người khác đã trả lời - bạn cần tìm sự cân bằng phù hợp).
Kịch bản thứ ba của bạn phức tạp hơn một chút. Nếu bạn đang sử dụng THÍCH, các công cụ lập chỉ mục thường sẽ giúp bạn tăng tốc độ đọc lên đến "%" đầu tiên. Nói cách khác, nếu bạn đang CHỌN cột WHERE THÍCH 'foo% bar%', cơ sở dữ liệu sẽ sử dụng chỉ mục để tìm tất cả các hàng nơi cột bắt đầu bằng "foo", sau đó cần quét các hàng trung gian đó để tìm tập hợp con có chứa "thanh". CHỌN ... cột WHERE THÍCH '% bar%' không thể sử dụng chỉ mục. Tôi hy vọng bạn có thể thấy tại sao.
Cuối cùng, bạn cần bắt đầu suy nghĩ về các chỉ mục trên nhiều cột. Khái niệm này giống nhau và hoạt động tương tự như công cụ THÍCH - về cơ bản, nếu bạn có một chỉ mục trên (a, b, c), công cụ sẽ tiếp tục sử dụng chỉ mục từ trái sang phải một cách tốt nhất có thể. Vì vậy, một tìm kiếm trên cột a có thể sử dụng chỉ số (a, b, c), như tìm kiếm trên (a, b). Tuy nhiên, công cụ sẽ cần thực hiện quét toàn bộ bảng nếu bạn đang tìm kiếm WHERE b = 5 VÀ c = 1)
Hy vọng rằng điều này sẽ giúp làm sáng tỏ một chút, nhưng tôi phải nhắc lại rằng tốt nhất bạn nên dành một vài giờ để tìm hiểu những bài viết hay giải thích những điều này một cách sâu sắc. Bạn cũng nên đọc tài liệu của máy chủ cơ sở dữ liệu cụ thể của mình. Cách các chỉ số được thực hiện và sử dụng bởi các nhà hoạch định truy vấn có thể thay đổi khá rộng rãi.