Bạn đã hỏi một câu hỏi khác "Tạo một Chỉ mục tốt nhất cho tìm kiếm theo ký tự đại diện thông qua 40 Triệu tên". Được rồi, bạn có 40 triệu bản ghi.
Bây giờ hãy xem xét công thức sau:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
Chỉ mục trên một cột thì càng tốt, càng gần x
là 1. Nếu là 1, tất cả các giá trị đều khác biệt, không có bản sao và một chỉ mục do đó khá nhanh.
Bây giờ bạn đang tìm kiếm 'john%'. Đó là 4 chữ cái và một kết thúc mở. Những chữ cái nào không quan trọng, DB của bạn phải xử lý 26 * 26 * 26 * 26 =456976 giá trị khác biệt. Đặt điều đó vào công thức trên và 40 triệu bản ghi của bạn. Bạn nhận được một x
trong số 0,0114244.
Tôi không biết ngưỡng này một lần nữa, nhưng IIRC là 0,1 hoặc cái gì đó. Vì vậy, nếu bạn x
trên 0,1 thì chỉ số được sử dụng, nếu thấp hơn thì không.
Tại sao lại như vậy? Việc sử dụng một chỉ mục thậm chí có thể làm chậm mọi thứ, khiến DB của bạn phải xem chỉ mục, xem trong chỉ mục đó, vị trí nào trên ổ cứng vật lý của bạn có bản ghi thích hợp và sau đó lấy bản ghi đó. Do đó, khi x dưới 10%, chỉ cần quét toàn bộ bảng sẽ nhanh hơn.
Tóm lại:Việc lọc 40 triệu bản ghi chỉ với một chỉ mục yếu như của bạn chỉ đơn giản là vô ích.