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

MySQL में तेज़ क्वेरी के लिए लूप या OR ऑपरेटर के बजाय IN() का उपयोग करें

MySQL में एकाधिक मानों के लिए कुशल क्वेरी: IN() ऑपरेटर

जब आपको किसी कॉलम के विरुद्ध कई मानों की जांच करने की आवश्यकता होती है, तो IN() ऑपरेटर का उपयोग करना कई OR शर्तों या लूप की तुलना में अधिक कुशल, पठनीय और रखरखाव योग्य होता है।

टेबल बनाना

mysql> CREATE TABLE DemoTable1538 (
    -> ClientId INT,
    -> ClientName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.59 sec)

डेटा डालना

mysql> INSERT INTO DemoTable1538 VALUES (101,'Chris');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1538 VALUES (102,'Robert');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable1538 VALUES (103,'Bob');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1538 VALUES (104,'Adam');
Query OK, 1 row affected (0.16 sec)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable1538;
+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Chris      |
|      102 | Robert     |
|      103 | Bob        |
|      104 | Adam       |
+----------+------------+
4 rows in set (0.00 sec)

IN() का उपयोग करके कुशल क्वेरी

mysql> SELECT * FROM DemoTable1538 WHERE ClientId IN (101,103,104);

परिणाम

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Chris      |
|      103 | Bob        |
|      104 | Adam       |
+----------+------------+
3 rows in set (0.00 sec)

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

पहलूIN()एकाधिक ORलूप (एप्लिकेशन में)
पठनीयताउत्कृष्टखराब (लंबा)N/A
प्रदर्शनअनुकूलितधीमा (पार्सिंग ओवरहेड)बहुत धीमा (नेटवर्क राउंड-ट्रिप्स)
रखरखावआसानकठिनजटिल
SQL इंजेक्शन जोखिमकम (पैरामीटराइज़्ड)उच्चउच्च

IN() के साथ पैरामीटराइज़्ड क्वेरी (सर्वोत्तम अभ्यास)

-- प्रोग्रामिंग भाषा में (उदाहरण: Python)
ids = [101, 103, 104]
placeholders = ','.join(['%s'] * len(ids))
query = f"SELECT * FROM DemoTable1538 WHERE ClientId IN ({placeholders})"
cursor.execute(query, ids)

बड़े IN() सूचियों के लिए विचार

  • MySQL में max_allowed_packet और range_optimizer_max_mem_size सीमाएँ होती हैं
  • बहुत बड़ी सूचियों (1000+ मान) के लिए, एक अस्थायी टेबल या JOIN का उपयोग करने पर विचार करें
  • IN() सूची में स्थिरांक होने पर MySQL बाइनरी खोज का उपयोग करता है (O(log n))

संबंधित ऑपरेटर: NOT IN

SELECT * FROM DemoTable1538 WHERE ClientId NOT IN (101,103,104);

यह 101, 103, 104 नहीं होने वाली सभी पंक्तियाँ लौटाता है।

चेतावनी: NULL मान

-- यदि सूची में NULL है, तो NOT IN अप्रत्याशित व्यवहार करता है
WHERE col NOT IN (1, 2, NULL)  -- कभी कोई पंक्ति नहीं लौटाता!

NOT IN के साथ NULL मानों से बचें या NOT EXISTS का उपयोग करें।

  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 क्वेरी में LIKE CONCAT() का उपयोग कैसे करें?

    MySQL LIKE CONCAT(): डायनामिक पैटर्न बनाना CONCAT() फंक्शन का उपयोग करके आप रनटाइम पर LIKE पैटर्न बना सकते हैं। यह तब उपयोगी है जब खोज पैटर्न किसी कॉलम, वेरिएबल, या पैरामीटर से आता है। उदाहरण: o अक्षर वाले नाम खोजें टेबल बनाएं: CREATE TABLE DemoTable (Name VARCHAR(50)); INSERT INTO DemoTable VALUES

  1. - क्या MySQL में घात (पावर) के लिए ^ ऑपरेटर का उपयोग करना चाहिए - नहीं, POW() या POWER() उपयोग करें

    MySQL में घात (एक्सपोनेंशिएशन) के लिए POW() / POWER() फंक्शन नहीं, MySQL में ^ ऑपरेटर बिटवाइज XOR है, घात (पावर) नहीं। घात के लिए POW() या POWER() फंक्शन का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable ( BaseValue INT, PowerValue FLOAT ); रिकॉर्ड्स इन्सर्ट करें: m