
ประสิทธิภาพของ Django
การปรับแต่ง query, ปัญหา N+1, ดัชนีฐานข้อมูล, connection pooling, profiling, monitoring
1ปัญหาด้านประสิทธิภาพที่พบบ่อยที่สุดที่เกี่ยวข้องกับ query ของ Django ORM คืออะไร?
ปัญหาด้านประสิทธิภาพที่พบบ่อยที่สุดที่เกี่ยวข้องกับ query ของ Django ORM คืออะไร?
คำตอบ
ปัญหา N+1 เป็นปัญหาด้านประสิทธิภาพที่พบบ่อยที่สุดของ Django ORM เกิดขึ้นเมื่อ query เริ่มต้นดึงข้อมูล N ออบเจ็กต์ จากนั้นมีการรัน query เพิ่มอีก N ครั้งเพื่อดึงออบเจ็กต์ที่เกี่ยวข้อง ตัวอย่างเช่น การวนซ้ำผ่านบทความและเข้าถึงผู้เขียนของบทความนั้นจะสร้าง query หนึ่งครั้งต่อบทความแทนที่จะเป็น query แบบ join เพียงครั้งเดียว
2ควรใช้เมธอดใดในการแก้ปัญหา N+1 กับความสัมพันธ์แบบ ForeignKey?
ควรใช้เมธอดใดในการแก้ปัญหา N+1 กับความสัมพันธ์แบบ ForeignKey?
คำตอบ
select_related() เป็นเมธอดที่เหมาะสมในการแก้ปัญหา N+1 กับความสัมพันธ์ ForeignKey และ OneToOneField โดยจะทำการ join SQL และดึงออบเจ็กต์ที่เกี่ยวข้องในครั้งเดียว ส่วน prefetch_related() ใช้สำหรับความสัมพันธ์ ManyToMany หรือความสัมพันธ์แบบย้อนกลับ (ForeignKey reverse)
3ควรใช้ prefetch_related() แทน select_related() เมื่อใด?
ควรใช้ prefetch_related() แทน select_related() เมื่อใด?
คำตอบ
prefetch_related() ออกแบบมาสำหรับความสัมพันธ์ ManyToMany และความสัมพันธ์แบบย้อนกลับ (ForeignKey reverse) ต่างจาก select_related() ที่ทำ join SQL prefetch_related() จะรัน query แยกและทำการ join ใน Python ซึ่งหลีกเลี่ยงการซ้ำซ้อนของข้อมูลที่จะเกิดขึ้นกับการ join SQL บนความสัมพันธ์ many-to-many
จะใช้ Prefetch() เพื่อปรับแต่ง query ของ prefetch_related() อย่างไร?
ประโยชน์หลักของการเพิ่มดัชนีฐานข้อมูลบนฟิลด์คืออะไร?
+21 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Django อื่นๆ
พื้นฐาน Python
Python เชิงวัตถุ
พื้นฐาน Django
Django Models - พื้นฐาน
Django Views
เทมเพลต Django
ฟอร์ม Django
QuerySets ขั้นสูง
การยืนยันตัวตนใน Django
Django Middleware
Django Admin
Django REST Framework
Django Signals
การอัปโหลดไฟล์
การแคชใน Django
Django Sessions
อีเมลใน Django
การทดสอบ Django
ความปลอดภัยของ Django
การ Deploy Django
Django ORM ขั้นสูง
Django & Celery
Django Channels
Django & GraphQL
Django & Docker
Django ในระบบนิเวศ Microservices
คำสั่ง Django แบบกำหนดเอง
การทำให้รองรับหลายภาษาใน Django
Design Patterns ใน Django
Django Async และ ASGI
Settings และการตั้งค่า Production
Observability และ Monitoring
เชี่ยวชาญ Django สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี