Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:OR क्लॉज को कैसे इंडेक्स करें

OR . को विभाजित करने का सामान्य तरीका विधेय UNION . के साथ है ।

ध्यान दें कि आपका उदाहरण आपकी अनुक्रमणिका के साथ ठीक से फिट नहीं है। भले ही आपने field1 . छोड़ दिया हो विधेय से, आपके पास field2 >= 1000 OR field3 >= 2000 होगा , जो एक अनुक्रमणिका का उपयोग नहीं कर सकता है। यदि आपके पास (field1, field2) . पर अनुक्रमणिकाएँ थीं और (field1,field3) या field2 या field3 अलग से, आपको काफी तेज़ क्वेरी मिलेगी।

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

ध्यान दें कि आपको व्युत्पन्न तालिका के लिए उपनाम प्रदान करना होगा, यही कारण है कि सबक्वायरी को T के रूप में उपनाम दिया गया है ।

एक वास्तविक दुनिया का उदाहरण। कॉलम और टेबल के नाम गुमनाम कर दिए गए हैं!

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

  2. ADOdb और सामान्य वेबसाइट सुरक्षा में SQL इंजेक्शन

  3. Auto_increment id एक के बाद एक क्यों नहीं बढ़ती, इसे कैसे सेट करें?

  4. 127.0.0.1 . के साथ mysql से कनेक्ट नहीं हो सकता

  5. mySQL:सरणी के लिए सबक्वायरी?