Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL मेरी अनुक्रमणिका अच्छी है?

क्वेरी को इस तरह लिखें:

SELECT *
    FROM orders
    JOIN users  ON orders.id_user = users.id
    WHERE orders.status='new'

निर्दिष्ट न करें कि कौन सी अनुक्रमणिका का उपयोग करना है।

WHERE . से शुरू खंड, ऐसा लगता है कि शायद उपयोगी बनें:INDEX(status) . लेकिन चूंकि "स्थिति" निम्न कार्डिनैलिटी वाले "ध्वज" की तरह लगती है, इसलिए अनुकूलक हो सकता है सूचकांक को अनदेखा करने का निर्णय लें और बस एक टेबल स्कैन करें। यह ठीक है। यह ठीक है क्योंकि इंडेक्स और डेटा के बीच उछाल की तुलना में टेबल स्कैन करना तेज़ होता है, जब इंडेक्स बहुत चुनिंदा नहीं होता है। किसी भी मामले में, निर्णय को अनुकूलक पर छोड़ दें।

अब जबकि यह orders के साथ काम कर रहा है , इसे JOIN . की आवश्यकता है users . के लिए . ऐसा करने का एकमात्र तरीका id . पर एक इंडेक्स होना है . उस नाम ("आईडी") का अर्थ है कि यह PRIMARY KEY हो सकता है , यह है? (कृपया SHOW CREATE TABLE provide प्रदान करें ।)

इंडेक्स कुकबुक

आपके द्वारा उल्लिखित दूसरी क्वेरी लिखी जानी चाहिए

SELECT * FROM users WHERE id=33

और, जैसा कि पहले ही चर्चा की जा चुकी है, अनुक्रमणिका (PRIMARY KEY ?) id . पर सही बात है।

कोई फायदा नहीं है (दिए गए SELECTs . के लिए , कम से कम) INDEX(status, id_user) . के लिए . आपके चयन में सभी कॉलम शामिल हैं (* ); इसने केवल id_user प्राप्त किया था , तो ऐसा सूचकांक "कवर" होगा, और इसका कुछ लाभ होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो तिथियों के बीच आउटपुट mysql

  2. एंड्रॉइड में आरएसए सही कुंजी का उत्पादन करता है लेकिन गलत डिक्रिप्शन

  3. html पृष्ठ को ताज़ा करें जब एक नई sql प्रविष्टि दर्ज की गई हो

  4. मैं तालिका में उनकी संख्यात्मक स्थिति के आधार पर कॉलम का चयन कैसे करूं?

  5. PHP चेतावनी:mysqli_connect ():(HY000/2002):कनेक्शन अस्वीकृत