Bạn chắc chắn nên dành chút thời gian đọc về lập chỉ mục, có rất nhiều bài viết về nó và điều quan trọng là phải hiểu những gì đang diễn ra.
Nói chung và chỉ mục áp đặt thứ tự trên các hàng của bảng.
Vì mục đích đơ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 vào, 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 đó vào một ứng dụng bảng tính rất thô sơ. Tất cả bảng tính này là hiển thị dữ liệu và đánh số các hàng theo thứ tự tuần tự.
Bây giờ hãy tưởng tượng rằng bạn cần phải tìm tất cả các hàng có một số giá trị "M" trong cột thứ ba. Với những gì bạn có sẵn, bạn chỉ có một tùy 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ó chỉ mục. Chỉ mục cụ thể này là chỉ mục 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 thứ tự có ý nghĩa (nói theo thứ tự bảng chữ cái) và cho mỗi giá trị, cung cấp danh sách các số hàng có 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 có giá trị của cột thứ ba là "M". Ví dụ: bạn có thể thực hiện binary search!Trong khi quét bảng yêu cầu bạn xem xét các hàng N (trong đó N là số hàng), tìm kiếm nhị phân chỉ yêu cầu bạn nhìn vào các mục nhập chỉ mục log-n, trong trường hợp rất xấu nhất. Wow, điều đó chắc chắn dễ hơn rất 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 mà 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 một công việc nhiều hơn một chút trong khi bạn đang viết hàng mới, nhưng bạn tiết kiệm rất nhiều thời gian khi bạn đang tìm kiếm một cái gì đó.
Vì vậy, nói chung, việc lập chỉ mục tạo ra sự cân bằng giữa hiệu quả đọc và hiệu quả viết. Không có chỉ mục, chèn có thể rất nhanh - công cụ cơ sở dữ liệu chỉ 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 chèn.
Mặt khác, lần đọ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 phải tìm số dư 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 LIKE, các công cụ lập chỉ mục thường sẽ giúp bạn tăng tốc độ đọc lên "%" đầu tiên. Nói cách khác, nếu bạn đang chọn WHERE cột LIKE '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", và sau đó cần phải quét các hàng trung gian đó để tìm tập hợp con có chứa "bar". SELECT ... WHERE cột LIKE '% bar%' không thể sử dụng chỉ mục. Tôi hy vọng bạn có thể thấy lý do tại sao.
Cuối cùng, bạn cần bắt đầu nghĩ về các chỉ mục trên nhiều cột. Khái niệm này là như nhau, và hành xử tương tự như các công cụ LIKE - thiết yếu, nếu bạn có một chỉ mục trên (a, b, c), động cơ sẽ tiếp tục sử dụng chỉ mục từ trái sang phải tốt nhất có thể. Vì vậy, tìm kiếm trên cột a có thể sử dụng chỉ mục (a, b, c), như chỉ mục một (a, b). Tuy nhiên, động cơ sẽ cần quét toàn bộ bàn nếu bạn đang tìm kiếm WHERE b = 5 AND c = 1)
Hy vọng điều này sẽ giúp giảm bớt ánh sáng, nhưng tôi phải nhắc lại rằng bạn nên bỏ ra một vài giờ đào xung quanh cho các bài viết tốt giải thích những điều này trong chiều sâu. Bạn cũng nên đọc tài liệu về 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à được sử dụng bởi các nhà lập kế hoạch truy vấn có thể thay đổi khá rộng rãi.
Có lẽ bạn nên gắn thẻ lại câu hỏi. Việc lựa chọn các chỉ mục là một phần quan trọng để tối ưu hóa bất kỳ mô hình cơ sở dữ liệu nào. Và quan điểm của tôi không liên quan đến php. – VGE