การอ่าน 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;โหนดแผนการทำงานที่พบบ่อย
- การสแกนตามลำดับ — อ่านทั้งตาราง
- การสแกนดัชนี — ใช้ดัชนี
- การสแกนฮีปแบบบิตแมป — รวมดัชนีหลายรายการ
- การเชื่อมตารางแบบแฮช / การเชื่อมตารางแบบผสาน / ลูปซ้อน — กลยุทธ์การเชื่อมตาราง
- การเรียงลำดับ, การรวมค่า, การจำกัดผลลัพธ์, การจัดรูปข้อมูลไว้ล่วงหน้า
ขั้นตอนการอ่านแผนการทำงาน
- เรียกใช้ EXPLAIN ANALYZE กับคำสั่งค้นหาที่ช้า
- ค้นหาโหนดที่มี
actual timeสูงที่สุด - เปรียบเทียบ
rowsที่ประมาณการกับactual rows - ตรวจสอบว่ามีการใช้ดัชนีหรือไม่
- ทำซ้ำเพื่อปรับปรุง: เพิ่มดัชนี / เขียนใหม่ / 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่าน EXPLAIN และ EXPLAIN ANALYZE
- การสแกนตามลำดับเทียบกับการสแกนด้วยดัชนี
- การรวมแบบแฮชเทียบกับการรวมแบบผสานเทียบกับลูปซ้อน
- การระบุและแก้ไขคำสั่งค้นหาที่ทำงานช้า