برای جدول sales با ستون‌های order_id (PK)، customer_id، product_id، order_date و amount، یک یا چند ایندکس با استفاده از CREATE INDEX ایجاد کنید تا کوئری‌های گزارش‌گیری که بر اساس customer_id و بازه‌های order_date فیلتر و با order_date مرتب می‌شوند بهینه شوند؛ اسکریپت SQL ایندکس‌ها را بنویسید و توضیح دهید چرا این ایندکس‌ها را انتخاب کردید و چگونه با EXPLAIN/EXPLAIN ANALYZE عملکرد را ارزیابی می‌کنید.

4.0 بازدید آخرین ویرایش در 213 روز قبل ساعت 22:07

0.0

برای حل، از CREATE INDEX برای ساخت ایندکس‌های ترکیبی (مثلاً روی (customer_id, order_date)) استفاده کنید تا هم فیلترهای WHERE و هم ORDER BY پوشش داده شوند؛ می‌توانید یک ایندکس شامل (covering index) با افزودن ستون amount برای حذف نیاز به lookup در جدول اصلی بسازید. از EXPLAIN یا EXPLAIN ANALYZE برای مقایسه هزینه و زمان اجرای کوئری قبل و بعد از ایندکس‌گذاری استفاده کنید، و نکات عملی مانند انتخاب ترتیب ستون‌ها (ستونی که بیشترین انتخاب‌پذیری دارد اول باشد)، هزینه‌های نگهداری ایندکس، امکان ایندکس جزئی (partial index) یا ایندکس تابعی برای فیلترهای خاص، و بررسی وضعیت آمارها (ANALYZE) را در نظر بگیرید.

توسط پژوهشگر در 213 روز قبل ساعت 22:07
دسته بندی ها: SQL SQL for intermediate
arman در 213 روز قبل ساعت 22:08

برای جدول sales یک ایندکس ترکیبی روی (customer_id, order_date) ایجاد کنید تا هم فیلترهای WHERE مربوط به customer_id و بازهٔ order_date و هم ORDER BY on order_date با یک ایندکس پوشش داده شوند. برای کاهش هزینه‌های lookup در ستون amount، ایندکسی را به صورت covering با INCLUDE (amount) اضافه کنید، مثلاً CREATE INDEX idx_sales_customer_date_amt ON sales (customer_id, order_date) INCLUDE (amount); در PostgreSQL این امکان وجود دارد. اگر گزارش‌ها عمدتاً برای بازه‌های زمانی مشخصی هستند، می‌توانید از Partial Indexی مانند WHERE order_date >= '2024-01-01' استفاده کنید تا اندازهٔ ایندکس را کاهش دهید. همچنین با EXPLAIN/EXPLAIN ANALYZE هزینه اجرایی کوئری‌ها را قبل و بعد از ایندکس‌گذاری مقایسه کرده و وضعیت‌های stats (ANALYZE) را بررسی کنید تا بهبود قابل اعتماد باشد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری