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

MySQL:cách lập chỉ mục một mệnh đề OR

Cách thông thường để chia tay OR các vị từ bằng UNION .

Lưu ý rằng ví dụ của bạn không phù hợp với các chỉ mục của bạn. Ngay cả khi bạn đã bỏ qua field1 từ vị ngữ, bạn sẽ có field2 >= 1000 OR field3 >= 2000 , không thể sử dụng chỉ mục. Nếu bạn có các chỉ mục trên (field1, field2)(field1,field3) hoặc field2 hoặc field3 riêng biệt, bạn sẽ nhận được một truy vấn nhanh hợp lý.

SELECT COUNT(*) FROM
(SELECT * FROM table WHERE field1 = 'value' AND field2 >= 1000
UNION
SELECT * FROM table WHERE field1 = 'value' AND field3 >= 2000) T

Lưu ý rằng bạn phải cung cấp bí danh cho bảng dẫn xuất, đó là lý do tại sao truy vấn con được đặt bí danh là T .

Một ví dụ trong thế giới thực. Tên cột và bảng đã được ẩn danh!

mysql> SELECT COUNT(*) FROM table;
+----------+
| COUNT(*) |
+----------+
|  3059139 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM table WHERE columnA = value1;
+----------+
| COUNT(*) |
+----------+
|     1068 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM table WHERE columnB = value2;
+----------+
| COUNT(*) |
+----------+
|      947 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM table WHERE columnA = value1 OR columnB = value2;
+----------+
| COUNT(*) |
+----------+
|     1616 |
+----------+
1 row in set (9.92 sec)

mysql> SELECT COUNT(*) FROM (SELECT * FROM table WHERE columnA = value1
UNION SELECT * FROM table WHERE columnB = value2) T;
+----------+
| COUNT(*) |
+----------+
|     1616 |
+----------+
1 row in set (0.17 sec)

mysql> SELECT COUNT(*) FROM (SELECT * FROM table WHERE columnA = value1
UNION ALL SELECT * FROM table WHERE columnB = value2) T;
+----------+
| COUNT(*) |
+----------+
|     2015 |
+----------+
1 row in set (0.12 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql chọn giá thấp nhất từ ​​nhiều lựa chọn

  2. Các hàm Ngày và Giờ trong MySQL không tồn tại

  3. Kết nối MySQL qua đường hầm SSH - làm thế nào để chỉ định máy chủ MySQL khác?

  4. Không thể tìm thấy mục sản lượng MySQL IFNULL N / A trong bộ sưu tập Lỗi

  5. Kết hợp MySQL và Mongodb trong một ứng dụng