28 มกราคม 2556

[125] ขำ ๆ กับประสิทธิภาพ ADO

เมื่อตอนที่ใช้ VB6 เคยจำได้ว่า ADO ที่ใช้เป็น Database API ของ VB มันห่วยแตก จนพอมาเป็น .Net เรียกว่ายกเครื่องกันใหม่หมด

พอดีมีโอกาสได้ลองทดสอบกับข้อมูล ด้วยการใช้ Recordset.Addnew กับการ Connection.Execute คำสั่ง Insert ธรรมดา ผลปรากฎว่า
  • ถ้าข้อมูลน้อย ๆ ไม่เกิน 50,000 rows ใช้งาน Addnew ก็สะดวกดี เพราะมันช่วยจัดการเรื่อง datatype ให้อัตโนมัติ แต่พอเกินจากนั้น ประสิทธิภาพมันจัดว่าเลวร้ายมาก
  • ถ้าใช้คำสั่ง Insert ธรรมดาให้ได้ผลลัพธ์เดียวกัน ไม่ว่าจะกี่ rows ก็ใช้เวลาเท่าเดิมเสมอ สรุปคือ มันไม่มี overhead ในการจัดการข้อมูลใน Recordset
  • ถ้าเทียบประสิทธิภาพ ที่ 300000 rows ต่างกันเกือบ 7 เท่าตัว (ถือว่าเลวร้ายมาก)
ตารางที่ใช้ทดสอบก็มี Primary Key แค่ 1 column + 1 Index column

ใช้ Recordset.Addnew ผลที่ได้ตอน 1000*300 rows คือ 6 วินาที

ใช้คำสั่ง SQL ธรรมดา ที่จำนวนแถวเท่ากัน ใช้เวลาน้อยมาก และสม่ำเสมอ ไม่มี overhead
สรุปว่า ถ้าข้อมูลน้อย ๆ ก็ใช้ ๆ ไปเถอะ .Addnew แต่ถ้ามันเหยียบหมื่นเหยียบแสนให้คิดดูใหม่ให้ดี ๆ เพราะยิ่งใช้ไปยิ่งช้า (เฮ้อ)




เกี่ยวกับเจ้าของบล๊อก

รูปภาพของฉัน

เป็นโปรแกรมเมอร์ที่ฝันว่าจะได้นอนเกาพุงไปวัน ๆ จนพุงลดกลายเป็นเอว ได้เป็นบุคคลที่มีความสุขที่สุดในโลกจนคนอื่น ๆ อิจฉา