پرش به مطلب اصلی

دستورالعمل‌های کوئری‌نویسی

بهترین روش‌های نوشتن کوئری‌های دیتابیس

استفاده از SelectRaw

  • در صورت عدم تأثیر منفی بر عملکرد، از استفاده از selectRaw خودداری کنید
  • تنها زمانی از selectRaw استفاده کنید که مزیت عملکردی قابل‌توجهی داشته باشد
  • قبل از استفاده از selectRaw، پیامدهای عملکردی آن را در نظر بگیرید

استفاده از Query Builder

  • از استفاده مستقیم از DB::table و متدهای مشابه Query Builder در سورس کد (به جز در مایگریشن‌ها) خودداری کنید
  • تنها در صورتی از متدهای مستقیم Query Builder استفاده کنید که هیچ راه جایگزینی وجود نداشته باشد
  • قبل از پیاده‌سازی هر راه‌حلی که نیاز به استفاده مستقیم از Query Builder دارد، با تیم مشورت کنید

دستورالعمل‌های کلی

  • همیشه از prepared statements برای جلوگیری از حملات تزریق SQL استفاده کنید
  • کوئری‌ها را تا حد امکان ساده و در عین حال کارآمد نگه دارید
  • برای اکثر عملیات دیتابیس از Eloquent ORM استفاده کنید
  • از query scopes برای محدودیت‌های قابل استفاده مجدد در کوئری‌ها استفاده کنید
  • روابط را به صورت eager load کنید تا از مشکل N+1 query جلوگیری شود
  • برای ستون‌هایی که به‌طور مکرر جستجو می‌شوند، از ایندکس‌های دیتابیس استفاده کنید
  • کوئری‌های پیچیده را با کامنت‌های واضح توضیح دهید

ملاحظات عملکردی

  • از استفاده از * در دستورات SELECT خودداری کنید و فقط ستون‌های مورد نیاز را مشخص کنید
  • برای پردازش مجموعه داده‌های بزرگ از chunk() استفاده کنید
  • برای عملیات مرتبط چندگانه از تراکنش‌های دیتابیس استفاده کنید
  • به مصرف حافظه هنگام کار با مجموعه نتایج بزرگ توجه داشته باشید
  • برای پیمایش کارآمد حافظه در مجموعه نتایج بزرگ از cursor() استفاده کنید

تست‌نویسی

  • برای کوئری‌های پیچیده تست بنویسید تا از عملکرد صحیح آن‌ها اطمینان حاصل کنید
  • برای کوئری‌هایی که به‌طور مکرر اجرا می‌شوند، تست عملکرد در نظر بگیرید
  • کوئری‌ها را با حجم واقعی داده‌ها تست کنید تا مشکلات احتمالی عملکرد را شناسایی کنید