EXPLAIN QUERY PLAN की मदद से उस प्लान को समझें जिसे SQLite प्लानर आपकी क्वेरी के लिए वास्तव में चुनता है।
इस पाठ को Kodokon में खोलेंSQL डिक्लेरेटिव है: आप परिणाम का वर्णन करते हैं, यह नहीं कि उसे कैसे प्राप्त करना है। डेटा को कैसे पढ़ना है यह क्वेरी प्लानर तय करता है। इसे काम करते हुए देखने के लिए, SQLite दो कमांड देता है: EXPLAIN QUERY PLAN एक पठनीय उच्च-स्तरीय प्लान देता है, जबकि अकेला EXPLAIN VDBE वर्चुअल मशीन का बाइटकोड उगल देता है। sqlite3 कमांड-लाइन टूल इंस्टॉल करें, या अपने ब्राउज़र में sqliteonline.com खोलें, और आगे आने वाले हर उदाहरण को दोहराएँ।
CREATE TABLE departments (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
department_id INTEGER,
salary INTEGER NOT NULL
);
INSERT INTO departments (id, name) VALUES
(1, 'Engineering'),
(2, 'Sales');
INSERT INTO employees
(id, name, department_id, salary)
VALUES
(1, 'Ada', 1, 65000),
(2, 'Grace', 1, 72000),
(3, 'Alan', 2, 58000);किसी भी SELECT क्वेरी के आगे EXPLAIN QUERY PLAN लगाएँ। परिणाम की हर लाइन बताती है कि किसी टेबल को कैसे पढ़ा जाता है। दो कीवर्ड प्रमुख हैं: SCAN का अर्थ है कि टेबल को पूरी तरह से, रो दर रो, स्कैन किया जाता है, जबकि SEARCH किसी इंडेक्स द्वारा निर्देशित एक लक्षित एक्सेस को दर्शाता है। किसी उपयुक्त इंडेक्स के बिना, एक साधारण समानता भी पहले से ही पूर्ण स्कैन को ट्रिगर कर देती है।
EXPLAIN QUERY PLAN
SELECT * FROM employees
WHERE department_id = 1;
-- Result: SCAN employees
-- (no index: the whole table is read)फ़िल्टर किए गए कॉलम पर एक इंडेक्स बनाएँ, फिर ठीक वही क्वेरी दोबारा चलाएँ: प्लान SCAN से बदलकर SEARCH ... USING INDEX हो जाता है। अन्य उल्लेख भी मूल्यवान हैं: USE TEMP B-TREE मेमोरी में साकार किए गए किसी सॉर्ट या ग्रुपिंग को उजागर करता है (अक्सर यह संकेत कि कोई ऑर्डरिंग इंडेक्स गायब है), और USING COVERING INDEX संकेत देता है कि टेबल को खोला तक नहीं गया।
CREATE INDEX idx_emp_dept
ON employees (department_id);
EXPLAIN QUERY PLAN
SELECT * FROM employees
WHERE department_id = 1;
-- SEARCH employees USING INDEX
-- idx_emp_dept (department_id=?)EXPLAIN की तुलना में EXPLAIN QUERY PLAN क्या लौटाता है?SCAN employees का क्या अर्थ है?ANALYZE कमांड किसलिए उपयोग किया जाता है?sqlite_stat1 में आँकड़े एकत्र करता है