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

Cú pháp tìm kiếm toàn văn bản MySQL thay thế

Rất tiếc, theo tài liệu MySQL SELECT , "mệnh đề HAVING được áp dụng gần như cuối cùng, ngay trước khi các mục được gửi đến khách hàng, không có sự tối ưu hóa."

Sự khác biệt là truy vấn đầu tiên sẽ sử dụng chỉ mục toàn văn bản để tính toán mức độ liên quan chỉ cho các hàng có 'Bob' trong name . Truy vấn thứ hai sẽ tính toán mức độ liên quan cho tất cả , sau đó loại bỏ hầu hết chúng (có thể sau khi sắp xếp toàn bộ bảng). Do đó, truy vấn thứ hai chậm hơn đáng kể. Ngay cả khi bạn đặt mệnh đề ORDER BY vào truy vấn đầu tiên, nó vẫn sẽ nhanh hơn so với việc sử dụng HAVING:

SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC

Nói chung, "không sử dụng HAVING cho các mục cần có trong mệnh đề WHERE."




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql if trong câu lệnh insert mà không có select

  2. Tối ưu hóa truy vấn mysql để sử dụng chỉ mục trên mệnh đề Bitwise where

  3. Chọn hàng ngẫu nhiên cho mỗi giá trị trường riêng biệt?

  4. Một truy vấn SQL để chọn cho đến khi SUM (users_count) đạt đến 1000

  5. chèn nhiều trường bằng vòng lặp foreach