0Pricing
SQL Academy · บทเรียน

การอ่าน EXPLAIN และ EXPLAIN ANALYZE

อ่านผังแผนการทำงาน ทำความเข้าใจต้นทุนเทียบกับเวลาจริง และระบุโหนดที่ใช้ทรัพยากรมาก

การอ่าน EXPLAIN และ EXPLAIN ANALYZE เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องใช้ EXPLAIN

EXPLAIN แสดงกลยุทธ์ของตัววางแผนสำหรับการดำเนินการคำค้น โดยไม่เรียกใช้คำค้นจริง ส่วน EXPLAIN ANALYZE จะเรียกใช้คำค้นและแสดงเวลาที่เกิดขึ้นจริงด้วย

EXPLAIN พื้นฐาน

แสดงแผนที่ประเมินไว้:

EXPLAIN SELECT * FROM orders WHERE user_id = 42;
--                            QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   Index Cond: (user_id = 42)

EXPLAIN ANALYZE

เรียกใช้คำค้นและเพิ่มเวลา รวมถึงจำนวนแถวที่เกิดขึ้นจริง:

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 ms

การอ่านโครงสร้างต้นไม้

แผนมีโครงสร้างเป็นต้นไม้ การเยื้องระยะหมายถึงโหนดย่อย และโหนดย่อยจะทำงานก่อนโหนดแม่

Aggregate
  -> Hash Join
     Hash Cond: (o.user_id = u.id)
     -> Seq Scan on orders
     -> Hash
        -> Seq Scan on users

ต้นทุนเทียบกับเวลา

คอลัมน์ cost มีตัวเลข TWO ค่า ได้แก่ startup_cost..total_cost ตัวเลขเหล่านี้เป็นหน่วยสมมติของตัววางแผน ไม่ใช่วินาที ให้ใช้ actual time สำหรับค่าจริง

แถว = ค่าประมาณ; แถวจริง = ค่าจริง

rows คือค่าที่ตัววางแผนคาดการณ์ ส่วน actual rows คือสิ่งที่เกิดขึ้นจริง หากสองค่านี้แตกต่างกันมาก แสดงว่าสถิติไม่ถูกต้อง

การวนซ้ำทำให้เวลาทวีคูณ

สำหรับลูปซ้อน actual time=X loops=N หมายความว่าแต่ละรอบใช้เวลา X และโหนดนั้นใช้เวลารวม X×N

Nested Loop  (actual time=0.05..2.03 rows=500)
  -> Seq Scan on orders  (actual ... loops=1)
  -> Index Scan using users_pkey  (actual time=0.01..0.01 loops=500)

BUFFERS บอกการรับส่งข้อมูล

EXPLAIN (ANALYZE, BUFFERS) รายงานจำนวนครั้งที่พบและอ่านบัฟเฟอร์ ซึ่งเป็นการรับส่งข้อมูลเบื้องหลังค่าการจับเวลา:

EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4

ตัวเลือกของ FORMAT

สำหรับการประมวลผลด้วยโปรแกรม ให้ใช้ JSON หรือ YAML:

EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;

อย่าใช้ EXPLAIN ANALYZE กับคำสั่งที่ทำลายข้อมูล

การใช้ EXPLAIN ANALYZE กับ UPDATE/DELETE/INSERT จะดำเนินการคำสั่งนั้นจริง ให้ครอบด้วยธุรกรรมและใช้ ROLLBACK หากต้องการตรวจสอบโดยไม่ยืนยันการเปลี่ยนแปลง:

BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;

โหนดแผนการทำงานที่พบบ่อย

  • การสแกนตามลำดับ — อ่านทั้งตาราง
  • การสแกนดัชนี — ใช้ดัชนี
  • การสแกนฮีปแบบบิตแมป — รวมดัชนีหลายรายการ
  • การเชื่อมตารางแบบแฮช / การเชื่อมตารางแบบผสาน / ลูปซ้อน — กลยุทธ์การเชื่อมตาราง
  • การเรียงลำดับ, การรวมค่า, การจำกัดผลลัพธ์, การจัดรูปข้อมูลไว้ล่วงหน้า

ขั้นตอนการอ่านแผนการทำงาน

  1. เรียกใช้ EXPLAIN ANALYZE กับคำสั่งค้นหาที่ช้า
  2. ค้นหาโหนดที่มี actual time สูงที่สุด
  3. เปรียบเทียบ rows ที่ประมาณการกับ actual rows
  4. ตรวจสอบว่ามีการใช้ดัชนีหรือไม่
  5. ทำซ้ำเพื่อปรับปรุง: เพิ่มดัชนี / เขียนใหม่ / ANALYZE

สรุป

EXPLAIN ANALYZE คือเครื่องมือหลักสำหรับตรวจสอบประสิทธิภาพ

  • ต้นทุนเป็นค่าเปรียบเทียบ แต่เวลาเป็นค่าจริง
  • จำนวนแถวที่ประมาณการเทียบกับค่าจริงช่วยเปิดเผยปัญหาสถิติ
  • BUFFERS แสดงการรับส่งข้อมูล
  • ครอบคำสั่งที่ทำลายข้อมูลด้วย BEGIN; ... ROLLBACK

ตรวจสอบความเข้าใจอย่างรวดเร็ว

EXPLAIN แตกต่างจาก EXPLAIN ANALYZE อย่างไร

คำถามที่พบบ่อย

บทเรียน “การอ่าน EXPLAIN และ EXPLAIN ANALYZE” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่าน EXPLAIN และ EXPLAIN ANALYZE” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่าน EXPLAIN และ EXPLAIN ANALYZE”

อ่านผังแผนการทำงาน ทำความเข้าใจต้นทุนเทียบกับเวลาจริง และระบุโหนดที่ใช้ทรัพยากรมาก คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่าน EXPLAIN และ EXPLAIN ANALYZE” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่าน EXPLAIN และ EXPLAIN ANALYZE
  2. การสแกนตามลำดับเทียบกับการสแกนด้วยดัชนี
  3. การรวมแบบแฮชเทียบกับการรวมแบบผสานเทียบกับลูปซ้อน
  4. การระบุและแก้ไขคำสั่งค้นหาที่ทำงานช้า
← กลับไปที่ SQL Academy