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)