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

Tìm kiếm chậm theo truy vấn chỉ mục LIKE% MYSQL

OR từ khóa khiến trình tối ưu hóa của MySQL phát điên.

Bạn có thể thử một cái gì đó như thế này.

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

Hoặc bạn có thể xem xét tìm kiếm FULLTEXT. Nó yêu cầu MyISAM hoặc phiên bản MySQL 5.6 trở lên.

CHỈNH SỬA * Thật khó để biết chính xác điều gì đang xảy ra với những thứ tối ưu hóa này. Bạn có thể thử cái này không? Điều này sẽ xem liệu lựa chọn ngôn ngữ có làm bạn khó chịu hay không.

 SELECT name 
   FROM table 
  WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')

Bạn có thể thử cái này không?

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION ALL
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

Nó sẽ không cho kết quả hoàn hảo - nó sẽ có các mục tên trùng lặp - nhưng nó sẽ bỏ qua DISTINCT bước khử trùng lặp trong truy vấn của bạn.

Bạn cũng có thể thử điều này.

SELECT name 
  FROM table
 WHERE lang_index='en'
   AND id IN (
    SELECT id from table 
     WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng Laravel Migration đã tồn tại, nhưng tôi muốn thêm mới chứ không phải cũ hơn

  2. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 4

  3. Làm cách nào để loại bỏ những nhận xét này trong MySQL dump?

  4. MySQL TẢI THÔNG TIN DỮ LIỆU với CẬP NHẬT KHÓA DUPLICATE

  5. CURRENT_DATE / CURDATE () không hoạt động dưới dạng giá trị DATE mặc định