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

Mysql truy vấn cùng một truy vấn với chỉ mục giây mà không nhận được thời gian Tìm nạp 10000x?

OR UPPER(lu.opis) LIKE UPPER('%SomeName%')

có 3 vấn đề về hiệu suất:

  • OR được tối ưu hóa kém. Về cơ bản, bảng phải được quét để kiểm tra tất cả các hàng. Các chỉ mục không có khả năng giúp ích.
  • UPPER(indexed-column) ngăn cản việc sử dụng chỉ mục trên cột đó. Điều này dễ dàng thực hiện xung quanh việc khai báo cột đó có COLLATION đó là "phân biệt chữ hoa chữ thường" - có nghĩa là utf8_unicode_ci; lưu ý _ci .
  • LIKE '%... không thể sử dụng chỉ mục vì đứng đầu ký tự đại diện.

Ngoài ra, thường là ngu ngốc khi có

32497 row(s) returned

Bạn sẽ làm gì với nhiều hàng đó? Thời gian chuyển mạng sẽ rất đáng kể, ngay cả khi bản thân truy vấn không.

Để "giải quyết" LIKE , ORUPPER tất cả các vấn đề cùng một lúc, tập hợp văn bản lại với nhau thành một cột duy nhất trong một bảng duy nhất. Sau đó, cung cấp FULLTEXT chỉ mục trên cột đó. MATCH ... AGAINST ... sẽ chạy nhanh hơn rất nhiều - ít nhất là để thực hiện SomeName Tìm kiếm. (LEFT JOINs là một vấn đề khác.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn LEFT OUTER JOIN không trả về các hàng mong đợi

  2. PDO's lastInsertId cho MySQL một điều kiện cuộc đua?

  3. Menu đệ quy với php và MySQLi

  4. Tại sao bạn không nên sử dụng mysql_fetch_assoc nhiều hơn 1 lần?

  5. Danh sách đơn hàng / vấn đề vòng lặp while