توضیح و مثال جامع برای SQL EXPLAIN VERBOSE
EXPLAIN VERBOSE در SQL یک دستور برای بررسی جزئیات دقیق اجرای یک عبارت SQL است. این دستور اطلاعات کاملی در مورد نحوه پردازش عبارت توسط موتور پایگاه داده ارائه می دهد، از جمله:
- نوع عملیات: نوع عملیاتی که در هر مرحله انجام می شود، مانند خواندن از جدول، پیوستن به دو جدول، یا مرتب سازی داده ها.
- هزینه تخمینی: تخمینی از هزینه هر عملیات، بر حسب واحدهای “هزینه” که توسط موتور پایگاه داده تعریف شده است.
- ردیف های خوانده شده: تعداد ردیف هایی که در هر مرحله از عبارت خوانده می شوند.
- روشهای دسترسی: روش هایی که موتور پایگاه داده برای دسترسی به داده ها استفاده می کند، مانند اسکن جدول کامل یا استفاده از ایندکس.
- اطلاعات مربوط به هر جدول: اطلاعات مربوط به هر جدول درگیر در عبارت، مانند نام جدول، تعداد ردیف ها و تعداد بلوک ها.
مزایای استفاده از EXPLAIN VERBOSE:
- عیب یابی: EXPLAIN VERBOSE می تواند به شما در عیب یابی مشکلات عملکرد با پرس و جوهای SQL کمک کند. با بررسی اطلاعات دقیق در مورد نحوه اجرای عبارت، می توانید قسمت هایی از عبارت را که باعث کندی سرعت می شوند شناسایی کنید.
- بهینه سازی: EXPLAIN VERBOSE می تواند به شما در بهینه سازی پرس و جوهای SQL کمک کند. با درک نحوه پردازش عبارت توسط موتور پایگاه داده، می توانید تغییراتی در عبارت ایجاد کنید تا عملکرد آن را بهبود بخشید.
- درک عملکرد: EXPLAIN VERBOSE می تواند به شما در درک نحوه عملکرد موتور پایگاه داده کمک کند. با بررسی اطلاعات دقیق در مورد نحوه اجرای عبارت، می توانید نحوه استفاده موتور پایگاه داده از منابع مانند CPU، حافظه و I/O را درک کنید.
نحوه استفاده از EXPLAIN VERBOSE:
برای استفاده از EXPLAIN VERBOSE، باید عبارت SQL مورد نظر خود را با کلمه کلیدی EXPLAIN VERBOSE قبل از آن اجرا کنید. به عنوان مثال، دستور زیر اطلاعات EXPLAIN VERBOSE را برای عبارت SELECT زیر چاپ می کند:
SQL
EXPLAIN VERBOSE
SELECT * FROM customers
WHERE country = 'US';
مثال:
فرض کنید می خواهید عملکرد عبارت SELECT زیر را بررسی کنید:
SQL
SELECT * FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.country = 'US';
می توانید از دستور EXPLAIN VERBOSE برای چاپ اطلاعات دقیق در مورد نحوه اجرای این عبارت استفاده کنید:
SQL
EXPLAIN VERBOSE
SELECT * FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.country = 'US';
این دستور اطلاعاتی مانند موارد زیر را چاپ می کند:
- نوع عملیات: اسکن جدول، پیوستن به دو جدول، و فیلتر کردن ردیف ها.
- هزینه تخمینی: هزینه هر عملیات، بر حسب واحدهای “هزینه”.
- ردیف های خوانده شده: تعداد ردیف هایی که در هر مرحله از عبارت خوانده می شوند.
- روشهای دسترسی: روش هایی که موتور پایگاه داده برای دسترسی به داده ها استفاده می کند، مانند اسکن جدول کامل یا استفاده از ایندکس.
- اطلاعات مربوط به هر جدول: اطلاعات مربوط به هر جدول درگیر در عبارت، مانند نام جدول، تعداد ردیف ها و تعداد بلوک ها.
با بررسی این اطلاعات، می توانید قسمت هایی از عبارت را که باعث کندی سرعت می شوند شناسایی کنید و تغییراتی در عبارت ایجاد کنید تا عملکرد آن را بهبود بخشید.
نکات مهم:
- EXPLAIN VERBOSE می تواند حجم زیادی از اطلاعات را چاپ کند، بنابراین ممکن است بخواهید از آن فقط برای عیب یابی یا بهینه سازی پرس و جوهای خاص استفاده کنید.
- EXPLAIN VERBOSE می تواند بر عملکرد موتور پایگاه داده تأثیر بگذارد، بنابراین بهتر است فقط در محیط های آزمایشی از آن استفاده کنید.
- ابزارهای زیادی برای تجزیه و تحلیل خروجی EXPLAIN VERBOSE در دسترس شما هستند.
منابع برای مطالعه بیشتر:
- https://www.postgresql.org/docs/current/using-explain.html
- https://dev.mysql.com/doc/mysql/en/explain.html
- https://learn.microsoft.com/en-us/sql/t-sql/queries/explain-transact-sql?view=azure-sqldw-latest