دستورالعملهای کوئرینویسی
بهترین روشهای نوشتن کوئریهای دیتابیس
استفاده از 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() استفاده کنید
تستنویسی
- برای کوئریهای پیچیده تست بنویسید تا از عملکرد صحیح آنها اطمینان حاصل کنید
- برای کوئریهایی که بهطور مکرر اجرا میشوند، تست عملکرد در نظر بگیرید
- کوئریها را با حجم واقعی دادهها تست کنید تا مشکلات احتمالی عملکرد را شناسایی کنید