Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में SELECT क्वेरी को IN() से तेज कैसे करें?

IN() ऑपरेटर से तेज क्वेरी एक्जीक्यूशन

MySQL में IN() ऑपरेटर आंतरिक रूप से बाइनरी सर्च (इंडेक्स होने पर) का उपयोग करता है, जिससे यह कई OR कंडीशन्स की तुलना में तेज होता है।

टेबल बनाना और डेटा इन्सर्ट करना

CREATE TABLE DemoTable1618 (
    ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName VARCHAR(20),
    ClientEmailId VARCHAR(30)
);

INSERT INTO DemoTable1618(ClientName, ClientEmailId) VALUES('Chris Brown', 'Brown323@gmail.com');
INSERT INTO DemoTable1618(ClientName, ClientEmailId) VALUES('David Miller', 'MillerDavid@gmail.com');
INSERT INTO DemoTable1618(ClientName, ClientEmailId) VALUES('John Doe', '998John_Doe@gmail.com');
INSERT INTO DemoTable1618(ClientName, ClientEmailId) VALUES('John Smith', '999John_Smith@gmail.com');
INSERT INTO DemoTable1618(ClientName, ClientEmailId) VALUES('Adam Smith', 'Adam_Smith@gmail.com');

मौजूदा डेटा

+----------+--------------+-------------------------+
| ClientId | ClientName   | ClientEmailId           |
+----------+--------------+-------------------------+
| 1        | Chris Brown  | Brown323@gmail.com      |
| 2        | David Miller | MillerDavid@gmail.com   |
| 3        | John Doe     | 998John_Doe@gmail.com   |
| 4        | John Smith   | 999John_Smith@gmail.com |
| 5        | Adam Smith   | Adam_Smith@gmail.com    |
+----------+----------+-------------------------+

धीमा तरीका: कई OR कंडीशन्स

SELECT * FROM DemoTable1618 
WHERE ClientEmailId = '998John_Doe@gmail.com' 
   OR ClientEmailId = '999John_Smith@gmail.com' 
   OR ClientEmailId = 'MillerDavid@gmail.com';

तेज तरीका: IN() ऑपरेटर

SELECT * FROM DemoTable1618 
WHERE ClientEmailId IN('998John_Doe@gmail.com', '999John_Smith@gmail.com', 'MillerDavid@gmail.com');

आउटपुट

+----------+--------------+-------------------------+
| ClientId | ClientName   | ClientEmailId           |
+----------+--------------+-------------------------+
| 2        | David Miller | MillerDavid@gmail.com   |
| 3        | John Doe     | 998John_Doe@gmail.com   |
| 4        | John Smith   | 999John_Smith@gmail.com |
+----------+--------------+-------------------------+

क्यों IN() तेज है

  • MySQL IN() लिस्ट को सॉर्ट करके बाइनरी सर्च करता है (O(log n) प्रति लुकअप)
  • OR चेन का मूल्यांकन क्रमिक होता है (O(n) प्रति रो)
  • इंडेक्स होने पर IN() रेंज स्कैन जैसा व्यवहार करता है
  • कॉन्स्टेंट लिस्ट के लिए ऑप्टिमाइज़र बेहतर प्लान बनाता है

बड़े IN() लिस्ट के लिए टिप्स

  • बहुत बड़े लिस्ट (1000+) के लिए अस्थायी टेबल या JOIN बेहतर
  • IN (SELECT ...) सबक्वेरी का उपयोग करें
  • मान पैरामीटराइज़्ड क्वेरी में पास करें

इंडेक्स बनाना (जरूरी)

CREATE INDEX idx_client_email ON DemoTable1618(ClientEmailId);

इंडेक्स के बिना दोनों तरीके फुल टेबल स्कैन करेंगे।

NOT IN के लिए सावधानी

-- NULL वैल्यू होने पर NOT IN अनपेक्षित परिणाम दे सकता है
WHERE Email NOT IN ('a@b.com', NULL)  -- हमेशा FALSE/UNKNOWN लौटाता है

-- बेहतर:
WHERE Email NOT IN ('a@b.com') AND Email IS NOT NULL
-- या
WHERE NOT EXISTS (SELECT 1 FROM excluded WHERE email = DemoTable1618.ClientEmailId)
  1. - क्या MySQL क्वेरी में SELECT NULL स्टेटमेंट का उपयोग कर सकते हैं?

    हां, हम MySQL क्वेरी में SELECT NULL स्टेटमेंट का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable ( Name varchar(100) ); Query OK, 0 rows affected (0.49 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(Chris)

  1. - MySQL SELECT क्वेरी में ALIAS (उपनाम) कैसे उपयोग करें

    AS कीवर्ड के साथ कॉलम और टेबल का उपनाम देना MySQL में कॉलम या टेबल को अस्थायी नाम (उपनाम) देने के लिए AS कीवर्ड का उपयोग करें। यह वैकल्पिक है लेकिन पठनीयता बढ़ाता है। टेबल और डेटा CREATE TABLE DemoTable ( Name VARCHAR(100) ); Query OK, 0 rows affected (0.51 sec) INSERT INTO DemoTable VALUES(

  1. - MySQL में SELECT क्वेरी परिणाम को क्रमबद्ध करना (ORDER BY)

    टेबल से डेटा चुनते समय पंक्तियाँ टेबल में मौजूद क्रम में आती हैं। विशिष्ट क्रम में प्राप्त करने के लिए ORDER BY उपयोग करें। सिंटैक्स आरोही क्रम (डिफ़ॉल्ट): SELECT * FROM table_name ORDER BY column_name अवरोही क्रम: SELECT * FROM table_name ORDER BY column_name DESC Python में MySQL से क्रमबद्ध डेट