MySQL में IN() ऑपरेटर: कई SELECT को एक में संयोजित करना
जब आपको एक ही टेबल से अलग-अलग शर्तों के आधार पर कई बार डेटा लेना हो, तो प्रत्येक के लिए अलग SELECT चलाने के बजाय IN() ऑपरेटर का उपयोग करके एक ही क्वेरी में करें। यह नेटवर्क राउंड-ट्रिप और क्वेरी पार्सिंग ओवरहेड को कम करता है।
उदाहरण: उम्र 21, 22, 23 वाले लोगों के नाम
टेबल बनाएं:
CREATE TABLE DemoTable (
Id INT,
Name VARCHAR(100),
Age INT
);
INSERT INTO DemoTable VALUES
(1, 'Chris', 23), (2, 'David', 21), (3, 'Mike', 24), (4, 'Robert', 22);
अनुकूलित क्वेरी: IN() का उपयोग
SELECT Name FROM DemoTable WHERE Age IN (21, 22, 23);
परिणाम:
+--------+ | Name | +--------+ | Chris | | David | | Robert | +--------+
तुलना: कई SELECT vs एक SELECT
-- खराब: 3 अलग-अलग क्वेरी (3 राउंड-ट्रिप) SELECT Name FROM DemoTable WHERE Age = 21; SELECT Name FROM DemoTable WHERE Age = 22; SELECT Name FROM DemoTable WHERE Age = 23; -- अच्छा: 1 क्वेरी (1 राउंड-ट्रिप) SELECT Name FROM DemoTable WHERE Age IN (21, 22, 23);
प्रदर्शन लाभ
- नेटवर्क: एक राउंड-ट्रिप बनाम कई
- पार्सिंग: एक बार पार्स/ऑप्टिमाइज़ बनाम कई बार
- इंडेक्स उपयोग: दोनों मामलों में इंडेक्स उपयोग समान
- कैश: एक क्वेरी कैश के लिए बेहतर
बड़े IN() सूची के लिए सावधानी
यदि IN सूची बहुत बड़ी है (हजारों मान), तो:
- अस्थायी टेबल बनाएं और JOIN करें
- या
VALUES ROW()कंस्ट्रक्टर के साथ JOIN करें (MySQL 8.0+)
-- बड़ी सूची के लिए अस्थायी टेबल दृष्टिकोण CREATE TEMPORARY TABLE temp_ages (age INT); INSERT INTO temp_ages VALUES (21), (22), (23), ...; SELECT d.Name FROM DemoTable d JOIN temp_ages t ON d.Age = t.age;