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

Tối ưu hóa tìm kiếm MySQL bằng cách sử dụng ký tự đại diện và thích

Chuỗi của bạn dài bao nhiêu?

Nếu chúng tương đối ngắn (ví dụ:từ tiếng Anh; avg_len =5) và bạn có bộ nhớ cơ sở dữ liệu dự phòng, hãy thử phương pháp này:

  • Đối với mỗi từ bạn muốn lưu trữ trong bảng, thay vào đó hãy lấy mọi hậu tố có thể có của từ đó. Nói cách khác, bạn tiếp tục loại bỏ ký tự đầu tiên cho đến khi không còn lại gì. Ví dụ:từ value cho:
    • value
    • alue
    • lue
    • ue
    • e
  • Lưu trữ từng trong số các hậu tố này trong cơ sở dữ liệu.
  • Bây giờ bạn có thể tìm kiếm các chuỗi con bằng cách sử dụng LIKE 'alu%' (sẽ tìm thấy 'alu' như một phần của 'giá trị').

Bằng cách lưu trữ tất cả các hậu tố, bạn đã loại bỏ nhu cầu về ký tự đại diện đứng đầu (cho phép một chỉ mục được sử dụng để tra cứu nhanh), với chi phí là không gian lưu trữ.

Chi phí lưu trữ

Số ký tự cần thiết để lưu trữ một từ trở thành word_len*word_len / 2 , tức là bậc hai trong độ dài từ, trên cơ sở mỗi từ. Đây là yếu tố gia tăng đối với các kích thước từ khác nhau:

  • Từ gồm 3 chữ cái:(3*3/2) / 3 = 1.5
  • Từ gồm 5 chữ cái:(5*5/2) / 5 = 2.5
  • Từ gồm 7 chữ cái:(7*7/2) / 7 = 3.5
  • Từ gồm 12 chữ cái:(12*12/2) / 12 = 6

Số hàng cần thiết để lưu trữ một từ tăng từ 1 lên word_len . Hãy lưu ý đến chi phí này. Các cột bổ sung nên được giữ ở mức tối thiểu để tránh lưu trữ lượng lớn dữ liệu dư thừa. Ví dụ:số trang mà từ được tìm thấy ban đầu sẽ ổn (nghĩ là không dấu smallint), nhưng siêu dữ liệu mở rộng về từ đó nên được lưu trữ trong một bảng riêng trên cơ sở từng từ, thay vì cho từng hậu tố.

Cân nhắc

Có một sự đánh đổi ở chỗ chúng ta tách 'các từ' (hoặc các đoạn). Như một ví dụ trong thế giới thực:chúng ta làm gì với dấu gạch ngang? Chúng ta có lưu trữ tính từ five-letter không là một hay hai từ?

Sự đánh đổi như sau:

  • Không thể tìm thấy bất kỳ thứ gì bị chia nhỏ dưới dạng một phần tử duy nhất. Nếu chúng tôi lưu trữ fiveletter riêng biệt, tìm kiếm five-letter hoặc fiveletter sẽ thất bại.
  • Bất kỳ điều gì không phải chia nhỏ ra sẽ tốn nhiều dung lượng lưu trữ hơn. Hãy nhớ rằng yêu cầu lưu trữ tăng lên bậc hai về độ dài của từ.

Để thuận tiện, bạn có thể muốn xóa dấu gạch nối và lưu trữ fiveletter . Từ bây giờ có thể được tìm thấy bằng cách tìm kiếm five , letterfiveletter . (Nếu bạn cũng loại bỏ dấu gạch ngang khỏi bất kỳ truy vấn tìm kiếm nào, người dùng vẫn có thể tìm thấy thành công five-letter .)

Cuối cùng, có những cách lưu trữ mảng hậu tố không tốn nhiều chi phí, nhưng tôi chưa chắc liệu chúng có dịch tốt sang cơ sở dữ liệu hay không.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn thiết kế cơ sở dữ liệu cho câu hỏi trong MySQL

  2. Lệnh SQL để liệt kê &hiển thị tất cả cơ sở dữ liệu trong MySQL &MariaDB

  3. MySQL RAND () Hàm - Tạo một số ngẫu nhiên trong MySQL

  4. Câu lệnh chuẩn bị sẵn trong PHP PDO - Truy vấn LIKE trong MySQL

  5. Ứng dụng danh sách việc cần làm sử dụng cơ sở dữ liệu PHP và MySQL