TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2104 596
🔆 قاتل N+1 در کوئری‌های جنگو

🔹 بزرگترین اشتباه توی جنگو، کوئری زدن داخل حلقه‌ست. تصور کن ۱۰۰ تا پست داری و میخوای اسم نویسنده هرکدوم رو چاپ کنی. اگه بنویسی posts = Post.objects.all() و بعد توی حلقه صداش بزنی، جنگو برای هر پست یه کوئری جداگانه به دیتابیس میفرسته! این یعنی ۱۰۰ تا کوئری اضافه و مرگِ سرعت سایت. راه حلش select_related هست که همه رو توی یک کوئریِ "JOIN" میاره. اینطوری مثال بزنیم:
# کد بد (تعداد زیادی کوئری به دیتابیس)
posts = Post.objects.all()
for post in posts:
print(post.author.name)

# کد بهینه (فقط ۱ کوئری به دیتابیس)
posts = Post.objects.select_related('author').all()
for post in posts:
print(post.author.name)

🔹همین تغییر کوچک، تعداد کوئری‌ها رو از ۱۰۰ تا به فقط ۱ دونه کاهش میده و سرعت لود صفحه رو توی جنگو به کل تغییر میده.

🐍 @python_rd
  • ❤ 4
  • 🔥 1
More from @python_rd
  1. Oct 15, 2026🌐 خروجی این کد پایتون چیست؟ x = [1, 2, 3] y = x x += [4, 5] print(x) print(y) 🔹 گزینه‌ها…
  2. Oct 15, 2026🔆 آیا enumerate() بهتر از index-based loop است؟ 🔹 خیلی‌ها هنوز این شکلی می‌نویسند: items…
  3. Oct 15, 2026🔆 یک تله عجیب در پایتون: bool در واقع زیرکلاس int است 🔹 خیلی‌ها می‌دانند True == 1 و Fal…
  4. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  5. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  6. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →