MySQL में एकाधिक मानों के विरुद्ध फ़िल्टर करने के लिए IN() और OR दोनों का उपयोग किया जा सकता है, लेकिन IN() आमतौर पर बेहतर प्रदर्शन देता है क्योंकि यह इंडेक्स का उपयोग कर सकता है।
सिंटैक्स तुलना
-- IN() का उपयोग SELECT * FROM table WHERE column IN (val1, val2, val3); -- OR का उपयोग SELECT * FROM table WHERE column = val1 OR column = val2 OR column = val3;
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable711 (Id INT, Name VARCHAR(100)); Query OK, 0 rows affected (0.92 sec) mysql> INSERT INTO DemoTable711 VALUES (100, 'Chris'), (101, 'Robert'), (102, 'Carol'), (103, 'Mike'), (104, 'Sam'); Query OK, 5 rows affected (0.15 sec)
2. IN() का उपयोग
mysql> SELECT * FROM DemoTable711 WHERE Id IN (101, 103, 104); +------+--------+ | Id | Name | +------+--------+ | 101 | Robert | | 103 | Mike | | 104 | Sam | +------+--------+ 3 rows in set (0.03 sec)
3. OR का उपयोग
mysql> SELECT * FROM DemoTable711 WHERE Id = 101 OR Id = 103 OR Id = 104; +------+--------+ | Id | Name | +------+--------+ | 101 | Robert | | 103 | Mike | | 104 | Sam | +------+--------+ 3 rows in set (0.00 sec)
प्रदर्शन अंतर
| पहलू | IN() | OR |
|---|---|---|
| इंडेक्स उपयोग | ✅ अनुकूलित (रेंज ऑप्टिमाइज़र) | ❌ अक्सर पूर्ण टेबल स्कैन |
| पठनीयता | ✅ साफ, संक्षिप्त | ❌ लंबा, दोहराव वाला |
| रखरखाव | ✅ आसान | ❌ त्रुटि-प्रवण |
| मानों की संख्या | हजारों तक | कुछ दर्जन तक व्यावहारिक |
EXPLAIN के साथ विश्लेषण
mysql> EXPLAIN SELECT * FROM DemoTable711 WHERE Id IN (101, 103, 104); -- type: range, key: PRIMARY, rows: 3 mysql> EXPLAIN SELECT * FROM DemoTable711 WHERE Id = 101 OR Id = 103 OR Id = 104; -- type: ALL (पूर्ण स्कैन संभव), key: NULL
सर्वोत्तम अभ्यास
- IN() प्राथमिकता दें स्थिर मान सूचियों के लिए
- OR उपयोग करें जब शर्तें अलग-अलग कॉलम्स पर हों:
WHERE col1 = 1 OR col2 = 2 - बड़ी सूचियों (>1000) के लिए, अस्थायी टेबल या JOIN पर विचार करें
NOT INके साथ NULL सावधानी लागू होती है
उपक्वेरी के साथ IN()
SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE country = 'India');
यह OR श्रृंखला से कहीं अधिक कुशल है।