Skip to content
میلاد حاتمی
میلاد حاتمی هستم. برنامه نویس و مدرس جنگو. امیدوارم بتونم با آموزش های رایگان در جنگولرن به برنامه نویس های این فریمورک کمک کنم.

حمایت از جنگولرن

تمامی مطالب و آموزش های جنگولرن رایگان است. برای حمایت از جنگولرن اینجا (پلتفرم کافیته) کلیک کنید.

09384677005 miladhzz@gmail.com instagram linkedin github-circle
جنگولرن - آموزش رایگان Django به زبان فارسی
خانه » چند مثال از جوین هایی که میتوانند در sql مشکل ساز و غیر بهینه باشند
Post Views: 625

چند مثال از جوین هایی که میتوانند در sql مشکل ساز و غیر بهینه باشند

فوریه 18, 2024 فوریه 18, 2024 دسته‌بندی نشده
میلاد حاتمی

چند مثال از جوین هایی که میتونن مشکل زا باشن توی sql و بهینه نیستند :‌

مثال 1: استفاده از CROSS JOIN

فرض کنید می‌خواهیم اطلاعات مشتریان و سفارش‌های آن‌ها را از دو جدول مجزا در SQL استخراج کنیم. برای این کار از CROSS JOIN استفاده می‌کنیم:

SELECT * FROM Customers
CROSS JOIN Orders;

این کد همه مشتری‌ها را با همه سفارش‌ها جوین می‌کند، که می‌تواند به مشکلات عملکردی و مصرف منابع زیادی منجر شود.

راه حل بهتر: برای ارتباط دو جدول بهتر است از INNER JOIN یا LEFT JOIN استفاده کنید تا فقط رکوردهای متناظر با یکدیگر جوین شوند و منابع بهینه‌تر مدیریت شوند.

در Django ORM:

# اشتباه: استفاده از select_related برای چندین ارتباط یک‌به-بیش-تا-یک
customers = Customer.objects.all().select_related(‘order__product’)

# راه حل: استفاده از prefetch_related برای این موارد
customers = Customer.objects.all().prefetch_related(‘order_set__product’)

مثال 2: استفاده از WHERE برای جوین

در این مثال، می‌خواهیم اطلاعات مشتریانی که سفارش داده‌اند را بر اساس شهر مشتری‌ها استخراج کنیم:

SELECT Customers.*, Orders.*
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
AND Customers.City = ‘New York’;

این کد علاوه بر استفاده از JOIN با WHERE برای فیلترینگ، منجر به اجراهای زمان‌بر می‌شود.

راه حل بهتر: از INNER JOIN یا LEFT JOIN برای اتصال جداول استفاده کنید و شرط‌های فیلترینگ را در بخش WHERE اعمال کنید.

در Django ORM:

# اشتباه: استفاده از فیلتر در select_related
customers = Customer.objects.filter(city=’New York’).select_related(‘order’)

# راه حل: فیلتر را در queryset اعمال کنید
customers = Customer.objects.filter(city=’New York’)

مثال 3: استفاده از JOIN بیش از حد

در این مثال، فرض کنید بخواهیم اطلاعات مشتریان، سفارش‌ها و محصولات را با هم جوین کنیم:

SELECT Customers.*, Orders.*, Products.*
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
INNER JOIN Products ON Orders.ProductID = Products.ProductID;

این کد ممکن است به عنوان یک JOIN زیاده‌روی شناخته شود که منجر به کاهش عملکرد و پیچیدگی افزایش می‌دهد.

راه حل بهتر: تلاش کنید فقط اطلاعات مورد نیاز خود را با INNER JOIN یا LEFT JOIN جوین کنید تا ساده‌تر و کارآمدتر باشد.

در Django ORM:

# اشتباه: جوین بیش از حد در یک queryset
customers = Customer.objects.all().select_related(‘order__product’)

# راه حل: جوین‌های مورد نیاز را جداگانه تعریف کنید
customers = Customer.objects.all().select_related(‘order’).prefetch_related(‘order__product’)

به این توجه کنید که در Django ORM می‌توانید از select_related برای اتصال‌های یک به یک و prefetch_related برای اتصال‌های یک به بیش از یک استفاده کنید تا بهینه‌ترین عملکرد را داشته باشید.

⚠️ من جنگو زیاد خوب نیستم اگر ایرادی داره توی کامنت ها بگید اصلاح کنم.

💠 @SEYED_BAX

Post Views: 625
کپی از مطالب حتی بدون ذکر منبع مجاز است.