| فقط مربوط به نسخه Cloud Firestore Enterprise است. |
برای عیبیابی کوئریهای کند، از Query Explain برای به دست آوردن طرح اجرای کوئری و پروفایل اجرای زمان اجرا استفاده کنید. بخش زیر مراحلی را که میتوانید برای بهینهسازی عملکرد کوئری بسته به پروفایل اجرا انجام دهید، شرح میدهد:
محدود کردن تعداد نتایج
از فیلد رکوردهای برگردانده شده در درخت اجرا برای شناسایی اینکه آیا پرسوجو اسناد زیادی را برمیگرداند یا خیر، استفاده کنید. محدود کردن تعداد اسناد برگردانده شده با استفاده از عبارت $limit را در نظر بگیرید. این کار اندازه بایت سریالی شده نتایج را هنگام بازگشت به کلاینتها از طریق شبکه کاهش میدهد. در مواردی که گره Limit قبل از یک گره MajorSort قرار دارد، موتور پرسوجو میتواند گرههای Limit و MajorSort را با هم ادغام کند و یک مرتبسازی و تحقق کامل در حافظه را با یک مرتبسازی TopN جایگزین کند و نیاز حافظه برای پرسوجو را کاهش دهد.
محدود کردن اندازه سند نتیجه
محدود کردن اندازه سند برگردانده شده با استفاده از عبارت $project را در نظر بگیرید تا از واکشی فیلدهای غیرضروری جلوگیری شود. این کار به کاهش هزینه محاسباتی و حافظهای پردازش نتایج میانی و اندازه بایت سریالی شده نتایج هنگام بازگشت به کلاینتها از طریق شبکه کمک میکند. در مواردی که تمام فیلدهای ارجاع شده در پرسوجو توسط یک شاخص معمولی (نه چندکلیدی) پوشش داده میشوند، این امر همچنین به پرسوجو اجازه میدهد تا به طور کامل توسط اسکن شاخص پوشش داده شود و از نیاز به واکشی اسناد از حافظه اصلی جلوگیری شود.
استفاده از شاخصها
برای تنظیم و بهینهسازی ایندکسها از دستورالعملهای زیر استفاده کنید.
تشخیص اینکه آیا پرسوجو از یک شاخص استفاده میکند یا خیر
شما میتوانید با بررسی گرههای برگ در درخت اجرا، تشخیص دهید که آیا پرسوجو از ایندکس استفاده میکند یا خیر. اگر گره برگ درخت اجرا ، گره TableScan باشد، به این معنی است که پرسوجو از ایندکس استفاده نمیکند و اسناد را از حافظه اصلی اسکن میکند. اگر از ایندکس استفاده شود، گره برگ درخت اجرا، شناسه ایندکس و فیلدهای ایندکس ایندکس را نمایش میدهد.
مشخص کنید که آیا شاخص مورد استفاده میتواند بهینه شود یا خیر
یک شاخص برای یک پرسوجو مفید است اگر بتواند تعداد اسنادی را که موتور پرسوجو باید از حافظه اصلی دریافت کند کاهش دهد یا اگر مرتبسازی فیلدهای آن بتواند الزام مرتبسازی پرسوجو را برآورده کند.
اگر از یک شاخص برای یک پرسوجو استفاده شود، اما موتور پرسوجو همچنان اسناد زیادی را دریافت و حذف کند، همانطور که توسط یک گره اسکن که رکوردهای زیادی را برمیگرداند و به دنبال آن یک گره فیلتر که رکوردهای کمی را برمیگرداند، مشخص میشود، این نشانهای است که گزاره پرسوجوی برآورده شده با استفاده از شاخص، گزینشی نیست. برای ایجاد یک شاخص مناسبتر، به ایجاد شاخصها مراجعه کنید.
اگر از یک شاخص غیر چندکلیدی برای یک پرسوجو استفاده شود، اما موتور پرسوجو همچنان در حال انجام مرتبسازی مجدد درون حافظهای مجموعه نتایج باشد، همانطور که توسط یک گره MajorSort در درخت اجرای پرسوجو مشخص میشود، این نشانهای است که شاخص مورد استفاده نمیتواند برای ارائه الزام مرتبسازی پرسوجو استفاده شود. برای ایجاد یک شاخص مناسبتر، به بخش بعدی مراجعه کنید.
فهرست برای $lookup
برای بهبود عملکرد مرحله $lookup ، یک اندیس در foreignField در مجموعه from ایجاد کنید. این کار به عملیات join اجازه میدهد تا بدون اسکن کل مجموعه، اسناد منطبق را در مجموعه from به طور موثر پیدا کند.
ایجاد ایندکسها
برای ایجاد شاخصها، مستندات مدیریت شاخص را دنبال کنید. برای اطمینان از اینکه پرسوجوی شما میتواند از شاخصها استفاده کند، شاخصهای معمولی (نه چندکلیدی) با فیلدهایی به ترتیب زیر ایجاد کنید:
- تمام فیلدهایی که در عملگرهای تساوی استفاده خواهند شد. برای به حداکثر رساندن احتمال استفاده مجدد در بین پرسوجوها، فیلدها را به ترتیب نزولی وقوع فیلدها در عملگرهای تساوی در بین پرسوجوها مرتب کنید.
- تمام فیلدهایی که بر اساس آنها مرتبسازی انجام خواهد شد (به همان ترتیب).
- فیلدهایی که در عملگرهای برد یا نابرابری به ترتیب نزولی انتخاب محدودیت پرس و جو استفاده خواهند شد.
- فیلدهایی که به عنوان بخشی از یک پرسوجو در فهرست بازگردانده میشوند: گنجاندن چنین فیلدهایی در فهرست به فهرست اجازه میدهد تا پرسوجو را پوشش دهد و از واکشی سند از حافظه اصلی جلوگیری کند.
برای پرسوجوهایی که شامل فیلتر کردن و مرتبسازی فیلدهای آرایهای هستند، ایجاد اندیسهای چندکلید (Multikey) را در نظر بگیرید.
از راهنمای پرسوجو استفاده کنید
اگر یک شاخص مناسبتر برای پرسوجو ایجاد کردهاید اما موتور پرسوجو از آن شاخص استفاده نمیکند، میتوانید با استفاده از یک راهنمای پرسوجو (query hint)، ترجیح شاخص موتور پرسوجو را لغو کنید.
برای اطلاعات بیشتر در مورد خروجی یک پرس و جو اجرا شده با Query Explain، به مرجع اجرای پرس و جو مراجعه کنید.