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

SQLite अभिव्यक्ति-आधारित अनुक्रमणिका

सारांश :इस ट्यूटोरियल में, आप सीखेंगे कि क्वेरी प्रदर्शन को बेहतर बनाने के लिए डेटा को क्वेरी करने के लिए SQLite एक्सप्रेशन-आधारित इंडेक्स का उपयोग कैसे करें, विशेष रूप से उन प्रश्नों के लिए जो एक्सप्रेशन या फ़ंक्शन का उपयोग करते हैं।

SQLite अभिव्यक्ति-आधारित अनुक्रमणिका का परिचय

जब आप कोई अनुक्रमणिका बनाते हैं, तो आप अक्सर तालिका में एक या अधिक स्तंभों का उपयोग करते हैं। सामान्य इंडेक्स के अलावा, SQLite आपको टेबल कॉलम में शामिल अभिव्यक्तियों के आधार पर एक इंडेक्स बनाने की अनुमति देता है। इस तरह के इंडेक्स को एक्सप्रेशन बेस्ड इंडेक्स कहा जाता है।

निम्नलिखित क्वेरी उन ग्राहकों का चयन करती है जिनकी कंपनी की लंबाई 10 वर्णों से अधिक है।

SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

यदि आप EXPLAIN QUERY PLAN . का उपयोग करते हैं कथन, आप पाएंगे कि SQLite क्वेरी प्लानर को संपूर्ण customers . को स्कैन करना था परिणाम सेट वापस करने के लिए तालिका।

EXPLAIN QUERY PLAN
SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

SQLite क्वेरी प्लानर एक सॉफ़्टवेयर घटक है जो SQL कथन को निष्पादित करने के लिए सर्वोत्तम एल्गोरिथम या क्वेरी योजना निर्धारित करता है। SQLite संस्करण 3.8.0 के अनुसार, क्वेरी प्लानर घटक को तेजी से चलाने और बेहतर क्वेरी प्लान बनाने के लिए फिर से लिखा गया था। पुनर्लेखन को अगली पीढ़ी के क्वेरी प्लानर या NGQP के रूप में जाना जाता है।

व्यंजक LENGTH(company) . के आधार पर एक अनुक्रमणिका बनाने के लिए , आप निम्नलिखित कथन का उपयोग करते हैं।

CREATE INDEX customers_length_company 
ON customers(LENGTH(company));Code language: SQL (Structured Query Language) (sql)

अब यदि आप उपरोक्त क्वेरी को फिर से निष्पादित करते हैं, तो SQLite डेटा का चयन करने के लिए अभिव्यक्ति अनुक्रमणिका का उपयोग करेगा, जो कि तेज़ है।

SQLite एक्सप्रेशन-आधारित इंडेक्स कैसे काम करता है

SQLite क्वेरी प्लानर एक्सप्रेशन-आधारित इंडेक्स का उपयोग केवल तभी करता है जब एक्सप्रेशन, जिसे आपने CREATE INDEX में निर्दिष्ट किया हो स्टेटमेंट, WHERE क्लॉज या ORDER BY क्लॉज के समान ही दिखाई देता है।

उदाहरण के लिए, नमूना डेटाबेस में, हमारे पास invoice_items . है टेबल।

निम्न कथन इकाई मूल्य और मात्रा कॉलम का उपयोग करके एक इंडेक्स बनाता है।

CREATE INDEX invoice_line_amount 
ON invoice_items(unitprice*quantity);Code language: SQL (Structured Query Language) (sql)

हालांकि, जब आप निम्न क्वेरी चलाते हैं:

EXPLAIN QUERY PLAN 
SELECT invoicelineid,
       invoiceid, 
       unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;Code language: SQL (Structured Query Language) (sql)

SQLite क्वेरी प्लानर ने इंडेक्स का उपयोग नहीं किया क्योंकि CREATE INDEX में एक्सप्रेशन ( unitprice*quantity ) WHERE . के समान नहीं है खंड (मात्रा*इकाई मूल्य)

SQLite अभिव्यक्ति आधारित अनुक्रमणिका प्रतिबंध

निम्नलिखित में CREATE INDEX . में प्रकट होने वाले व्यंजक पर सभी प्रतिबंध सूचीबद्ध हैं:बयान।

  1. व्यंजक केवल अनुक्रमित किया जा रहा है कि तालिका के स्तंभों को संदर्भित करना चाहिए। यह अन्य तालिकाओं के स्तंभों को संदर्भित नहीं कर सकता।
  2. अभिव्यक्ति केवल नियतात्मक फ़ंक्शन कॉल का उपयोग कर सकती है।
  3. अभिव्यक्ति एक सबक्वेरी का उपयोग नहीं कर सकती।

इस ट्यूटोरियल में, आपने सीखा कि क्वेरी प्रदर्शन को बेहतर बनाने के लिए SQLite एक्सप्रेशन आधारित इंडेक्स का उपयोग कैसे करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite Sum () बनाम टोटल ():क्या अंतर है?

  2. इसके कारण:android.database.sqlite.SQLiteException:ऐसी कोई तालिका नहीं:बुक (कोड 1 SQLITE_ERROR)

  3. JSON फ़ंक्शन अब SQLite में डिफ़ॉल्ट रूप से सक्षम हैं

  4. SQLite में महीने का पहला, दूसरा, तीसरा या चौथा सोमवार प्राप्त करें

  5. SQLite IS NULL