Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tối ưu hóa truy vấn MySQL của thuật ngữ LIKE% ORDER BY int

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể có mệnh đề MySQL IN trong truy vấn tìm kiếm đàn hồi của mình?

  2. Các vấn đề gặp phải với kiểu dữ liệu int (11) trong MYSQL

  3. Dừng truy vấn thông qua pdo

  4. Cách tìm đối chiếu trong MySQL

  5. Bạn có thể giải quyết truy vấn SQL đơn giản này không?