Python Coding Academy
🐍 آموزش جامع Python — پست ۲۲۰
تحلیل آمار Queryها با ANALYZE
در پست قبل با VACUUM آشنا شدیم که برای بازسازی فایل Database استفاده میشود.
حالا سراغ ابزار دیگری میرویم که به بهینهسازی اجرای Queryها کمک میکند: ANALYZE.
SQLite میتواند با جمعآوری آمار درباره جدولها و Indexها، تصمیمهای بهتری برای اجرای Query بگیرد.
🔹 اجرای ANALYZE
import sqlite3
connection = sqlite3.connect("school.db")
connection.execute("ANALYZE")
connection.close()
print("Analysis completed")
این دستور آمار مربوط به Database را جمعآوری میکند و معمولاً آنها را در جدولهای آماری داخلی SQLite ذخیره میکند.
🔹 چرا آمار مهم است؟
فرض کنیم جدول بزرگی از دانشجویان داریم و روی ستون city یک Index ساختهایم:
CREATE INDEX IF NOT EXISTS idx_students_city
ON students(city);
حالا Query زیر را اجرا میکنیم:
SELECT *
FROM students
WHERE city = 'Baku';
SQLite باید تصمیم بگیرد برای پیدا کردن رکوردها از Index استفاده کند یا روش دیگری را انتخاب کند.
آمار جمعآوریشده توسط ANALYZE میتواند به این تصمیم کمک کند.
🔹 بررسی برنامه اجرای Query
برای مشاهده روش انتخابشده توسط SQLite از EXPLAIN QUERY PLAN استفاده میکنیم:
plan = connection.execute("""
EXPLAIN QUERY PLAN
SELECT *
FROM students
WHERE city = ?
""", ("Baku",)).fetchall()
for row in plan:
print(row)
خروجی بسته به ساختار جدول، Indexها و نسخه SQLite متفاوت است.
اگر Index مناسب باشد، ممکن است در خروجی عبارتی مانند SEARCH و نام Index دیده شود.
🔹 اجرای ANALYZE برای یک جدول
لازم نیست همیشه کل Database را تحلیل کنیم. میتوانیم آمار یک جدول مشخص را هم بهروزرسانی کنیم:
ANALYZE students;
این کار برای جمعآوری آمار مربوط به جدول students استفاده میشود.
⚠️ نکات مهم
ANALYZE خودش Index جدید ایجاد نمیکند.
اجرای آن تضمین نمیکند که همه Queryها سریعتر شوند.
برای Databaseهایی که دادههایشان مرتب تغییر میکند، بهروزرسانی آمار ممکن است مفید باشد.
EXPLAIN QUERY PLAN برای بررسی روش اجرای Query است؛ اما زمان اجرای واقعی را اندازهگیری نمیکند.
🧠 خلاصه
ANALYZE
↓
جمعآوری آمار Database
↓
کمک به انتخاب بهتر Query Plan
↓
بررسی با EXPLAIN QUERY PLAN
… خواندن کامل ←
21 ·