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

SQLite अनुक्रमणिका

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

इंडेक्स क्या है?

संबंधपरक डेटाबेस में, एक तालिका पंक्तियों की एक सूची है। उसी समय, प्रत्येक पंक्ति में समान स्तंभ संरचना होती है जिसमें कक्ष होते हैं। प्रत्येक पंक्ति में पंक्ति की पहचान करने के लिए उपयोग की जाने वाली लगातार पंक्तिबद्ध अनुक्रम संख्या भी होती है। इसलिए, आप तालिका को जोड़े की सूची के रूप में मान सकते हैं:(पंक्तिबद्ध, पंक्ति)।

एक तालिका के विपरीत, एक सूचकांक का विपरीत संबंध होता है:(पंक्ति, पंक्तिबद्ध)। अनुक्रमणिका एक अतिरिक्त डेटा संरचना है जो किसी क्वेरी के प्रदर्शन को बेहतर बनाने में मदद करती है।

SQLite इंडेक्स को व्यवस्थित करने के लिए बी-पेड़ का उपयोग करता है। ध्यान दें कि B संतुलित के लिए खड़ा है, बी-पेड़ एक संतुलित पेड़ है, बाइनरी पेड़ नहीं।

बी-ट्री पेड़ के दोनों किनारों पर डेटा की मात्रा को संतुलित रखता है ताकि एक पंक्ति का पता लगाने के लिए जिन स्तरों को पार किया जाना चाहिए उनकी संख्या हमेशा समान अनुमानित संख्या में हो। इसके अलावा, बी-ट्री इंडेक्स पर समानता (=) और श्रेणियों (>,>=, <,<=) का उपयोग करके क्वेरी करना बहुत कुशल है।

इंडेक्स कैसे काम करता है

प्रत्येक सूचकांक एक विशिष्ट तालिका से जुड़ा होना चाहिए। एक इंडेक्स में एक या अधिक कॉलम होते हैं, लेकिन इंडेक्स के सभी कॉलम एक ही टेबल में होने चाहिए। एक टेबल में कई इंडेक्स हो सकते हैं।

जब भी आप एक इंडेक्स बनाते हैं, तो SQLite इंडेक्स डेटा को होल्ड करने के लिए एक बी-ट्री स्ट्रक्चर बनाता है।

अनुक्रमणिका में आपके द्वारा अनुक्रमणिका में निर्दिष्ट स्तंभों का डेटा और संबंधित rowid . होता है मूल्य। यह SQLite को अनुक्रमित स्तंभों के मानों के आधार पर पंक्ति का शीघ्रता से पता लगाने में मदद करता है।

किसी पुस्तक की अनुक्रमणिका की तरह डेटाबेस में एक अनुक्रमणिका की कल्पना करें। अनुक्रमणिका को देखकर, आप खोजशब्दों के आधार पर पृष्ठ संख्याओं की शीघ्रता से पहचान कर सकते हैं।

SQLite CREATE INDEX बयान

एक इंडेक्स बनाने के लिए, आप CREATE INDEX . का उपयोग करते हैं निम्नलिखित सिंटैक्स के साथ कथन:

CREATE [UNIQUE] INDEX index_name 
ON table_name(column_list);Code language: SQL (Structured Query Language) (sql)

अनुक्रमणिका बनाने के लिए, आप तीन महत्वपूर्ण जानकारी निर्दिष्ट करते हैं:

  • इंडेक्स का नाम CREATE INDEX . के बाद कीवर्ड।
  • सूचकांक में तालिका का नाम संबंधित है।
  • सूचकांक के स्तंभों की सूची।

यदि आप यह सुनिश्चित करना चाहते हैं कि एक या अधिक कॉलम में मान ईमेल और फोन जैसे अद्वितीय हैं, तो आप UNIQUE का उपयोग करते हैं CREATE INDEX . में विकल्प बयान। CREATE UNIQUE INDEX एक नई अनूठी अनुक्रमणिका बनाता है।

SQLite UNIQUE अनुक्रमणिका उदाहरण

आइए contacts . नाम की एक नई तालिका बनाएं प्रदर्शन के लिए।

CREATE TABLE contacts (
	first_name text NOT NULL,
	last_name text NOT NULL,
	email text NOT NULL
);Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

मान लीजिए, आप यह लागू करना चाहते हैं कि ईमेल अद्वितीय है, आप निम्नानुसार एक अद्वितीय अनुक्रमणिका बनाते हैं:

CREATE UNIQUE INDEX idx_contacts_email 
ON contacts (email);Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

इसका परीक्षण करने के लिए।

सबसे पहले, contacts . में एक पंक्ति डालें टेबल।

INSERT INTO contacts (first_name, last_name, email)
VALUES('John','Doe','[email protected]');Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

दूसरा, डुप्लीकेट ईमेल के साथ दूसरी पंक्ति डालें।

INSERT INTO contacts (first_name, last_name, email)
VALUES('Johny','Doe','[email protected]');Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

SQLite ने एक त्रुटि संदेश जारी किया जो दर्शाता है कि अद्वितीय अनुक्रमणिका का उल्लंघन किया गया है। क्योंकि जब आप दूसरी पंक्ति सम्मिलित करते हैं, तो SQLite ने जाँच की और सुनिश्चित किया कि ईमेल email में पंक्तियों में अद्वितीय है contacts . में से टेबल।

आइए contacts में दो और पंक्तियां डालें टेबल।

INSERT INTO contacts (first_name, last_name, email)
VALUES('David','Brown','[email protected]'),
      ('Lisa','Smith','[email protected]');Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

यदि आप contacts . से डेटा क्वेरी करते हैं एक विशिष्ट ईमेल के आधार पर तालिका में, SQLite डेटा का पता लगाने के लिए अनुक्रमणिका का उपयोग करेगा। निम्नलिखित कथन देखें:

SELECT
	first_name,
	last_name,
	email
FROM
	contacts
WHERE
	email = '[email protected]';Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

यह जांचने के लिए कि SQLite अनुक्रमणिका का उपयोग करता है या नहीं, आप EXPLAIN QUERY PLAN का उपयोग करते हैं बयान इस प्रकार है:

EXPLAIN QUERY PLAN 
SELECT
	first_name,
	last_name,
	email
FROM
	contacts
WHERE
	email = '[email protected]';Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

SQLite बहु-स्तंभ अनुक्रमणिका उदाहरण

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

SQLite मल्टीकॉलम इंडेक्स पर डेटा को CREATE INDEX में निर्दिष्ट पहले कॉलम द्वारा सॉर्ट करता है बयान। फिर, यह दूसरे कॉलम के आधार पर डुप्लिकेट मानों को सॉर्ट करता है, और इसी तरह।

इसलिए, जब आप एक बहु-स्तंभ अनुक्रमणिका बनाते हैं तो स्तंभ क्रम बहुत महत्वपूर्ण होता है।

बहु-स्तंभ अनुक्रमणिका का उपयोग करने के लिए, क्वेरी में वह शर्त होनी चाहिए जिसमें अनुक्रमणिका में परिभाषित स्तंभ क्रम समान हो।

निम्न कथन first_name . पर एक बहु-स्तंभ अनुक्रमणिका बनाता है और last_name contacts . के कॉलम टेबल:

CREATE INDEX idx_contacts_name 
ON contacts (first_name, last_name);Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

अगर आप contacts . को क्वेरी करते हैं WHERE . में निम्न में से किसी एक शर्त के साथ तालिका खंड, SQLite डेटा की खोज के लिए बहु-स्तंभ अनुक्रमणिका का उपयोग करेगा।

1) first_name . द्वारा डेटा फ़िल्टर करें कॉलम।

WHERE
	first_name = 'John';Code language: SQL (Structured Query Language) (sql)

2) डेटा को first_name . दोनों द्वारा फ़िल्टर करें और last_name कॉलम:

WHERE
	first_name = 'John' AND last_name = 'Doe';Code language: SQL (Structured Query Language) (sql)

हालांकि, यदि आप निम्न स्थितियों में से किसी एक का उपयोग करते हैं तो SQLite बहु-स्तंभ अनुक्रमणिका का उपयोग नहीं करेगा।

1) last_name . द्वारा फ़िल्टर करें केवल कॉलम।

WHERE
	last_name = 'Doe';Code language: SQL (Structured Query Language) (sql)

2) first_name . द्वारा फ़िल्टर करें या last_name कॉलम।

last_name = 'Doe' OR first_name = 'John';Code language: SQL (Structured Query Language) (sql)

SQLite शो इंडेक्स

किसी तालिका से संबद्ध सभी अनुक्रमणिकाओं को खोजने के लिए, आप निम्न आदेश का उपयोग करते हैं:

PRAGMA index_list('table_name');Code language: SQL (Structured Query Language) (sql)

उदाहरण के लिए, यह स्टेटमेंट contacts . के सभी इंडेक्स को दिखाता है टेबल:

PRAGMA index_list('playlist_track');Code language: SQL (Structured Query Language) (sql)

यहाँ आउटपुट है:

किसी अनुक्रमणिका में स्तंभों के बारे में जानकारी प्राप्त करने के लिए, आप निम्न आदेश का उपयोग करते हैं:

PRAGMA index_info('idx_contacts_name');Code language: SQL (Structured Query Language) (sql)

यह उदाहरण इंडेक्स की कॉलम सूची देता है idx_contacts_name :

डेटाबेस से सभी इंडेक्स प्राप्त करने का दूसरा तरीका sqlite_master . से क्वेरी करना है टेबल:

SELECT
   type, 
   name, 
   tbl_name, 
   sql
FROM
   sqlite_master
WHERE
   type= 'index';Code language: SQL (Structured Query Language) (sql)

SQLite DROP INDEX बयान

डेटाबेस से किसी इंडेक्स को हटाने के लिए, आप DROP INDEX . का उपयोग करते हैं बयान इस प्रकार है:

DROP INDEX [IF EXISTS] index_name;Code language: SQL (Structured Query Language) (sql)

इस सिंटैक्स में, आप उस इंडेक्स का नाम निर्दिष्ट करते हैं जिसे आप DROP INDEX के बाद छोड़ना चाहते हैं। खोजशब्द। IF EXISTS विकल्प किसी इंडेक्स को तभी हटाता है जब वह मौजूद हो।

उदाहरण के लिए, आप idx_contacts_name . को हटाने के लिए निम्न कथन का उपयोग करते हैं सूचकांक:

DROP INDEX idx_contacts_name;Code language: SQL (Structured Query Language) (sql)

इसे आज़माएं

idx_contacts_name अनुक्रमणिका को डेटाबेस से पूरी तरह हटा दिया गया है।

इस ट्यूटोरियल में, आपने 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. रूटेड एंड्रॉइड डिवाइस पर डेटाबेस की जांच कैसे करें

  2. SQLite ट्रिम () कैसे काम करता है

  3. SQLite क्वेरी परिणामों में कॉलम नाम शामिल करें

  4. sqlite 2 एमबी से अधिक के साथ फ़ील्ड प्राप्त करें

  5. SQLiteQueryBuilder में चयनआर्ग कॉलम में पूर्णांक मानों के साथ काम नहीं करता है