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

Hiệu suất REGEXP (so sánh với LIKE và =)

Về regexp

Regexp có thể không bao giờ sử dụng một chỉ mục trong MySQL.
= sẽ sử dụng một chỉ mục nếu:

  • một chỉ mục được khai báo trên cột;
  • các giá trị trong cột có đủ số lượng (nếu hơn +/- 20% số hàng khớp, MySQL sẽ không sử dụng chỉ mục, vì trong trường hợp đó, việc quét toàn bộ bảng sẽ nhanh hơn );
  • Không có chỉ mục nào khác trên cùng một bảng phù hợp hơn (MySQL chỉ có thể sử dụng một chỉ mục cho mỗi bảng cho mỗi lựa chọn con);

Xem xét những điều này và một số bí truyền khác, hãy cảnh báo = so sánh là nhiều nhanh hơn regexp.

Về lượt thích

LIKE có thể sử dụng một chỉ mục nếu ký tự đại diện không phải là ký tự đầu tiên.

SELECT * FROM t WHERE a LIKE 'abc'   <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%'  <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%'    <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%'   <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf'  <<-- cannot use an index

Hiệu suất của like khi sử dụng một chỉ mục rất gần với = (giả sử số hàng được trả về bằng nhau).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tomcat7:Không thể tải lớp trình điều khiển JDBC [com.mysql.jdbc.Driver]

  2. Làm cách nào để dừng truy vấn MySQL nếu quá lâu?

  3. Truy xuất các hàng được nhóm theo giờ với MySQL

  4. Sự khác biệt giữa MySQL, MySQLi và PDO là gì?

  5. cách thích hợp để chèn dữ liệu với id là tự động tăng trong mysqli