Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:cara mengindeks klausa OR

Cara umum untuk memecah OR predikat dengan UNION .

Perhatikan bahwa contoh Anda tidak cocok dengan indeks Anda. Bahkan jika Anda menghilangkan field1 dari predikat, Anda akan memiliki field2 >= 1000 OR field3 >= 2000 , yang tidak dapat menggunakan index. Jika Anda memiliki indeks di (field1, field2) dan (field1,field3) atau field2 atau field3 secara terpisah, Anda akan mendapatkan kueri yang cukup cepat.

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

Perhatikan bahwa Anda harus memberikan alias untuk tabel turunan, itulah sebabnya subquery diberi alias sebagai T .

Contoh dunia nyata. Nama kolom dan tabel telah dianonimkan!

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. prosedur tersimpan mysql:parameter keluar

  2. MySQL LOAD_FILE mengembalikan NULL

  3. Bagaimana saya bisa menghitung jumlah baris yang dikembalikan oleh kueri MySQL?

  4. Peringkat MySQL Dengan Berat

  5. Bisakah Anda menambahkan pernyataan if di ORDER BY?