28 พฤศจิกายน 2554

[081] join big table in SQLite

เมื่อเดือนที่ผ่านมา ผมได้ทำการใช้ SQLite ทำการสร้างรายงานเหมือนปกติทุก แต่ปรากฎว่า query ที่เคย run เป็นปกติทุกเดือนนั้น ใช้เวลานานมากใช้เวลาเกิน 3 ชม. ในการหาผลลัพธ์ ซึ่งผมจำเป็นต้องใช้ข้อมูลเลยปล่อยให้ run ทั้งคืน

สำหรับ table ที่ join กันนั้นใช้ primary key ในการ join แต่ปัญหาคือ ปริมาณ record ที่อยู่ใน table หลักนั้นน่าจะใหญ่จนเกิน SQLite ได้ออกแบบไว้ หรือจะพูดให้ถูกต้องคือ ใช้งานผิดประเภท นั้นเอง


Table A เป็นข้อมูลการขาย จำนวน 10 เดือน มีจำนวน 97409 records
Table B เป็นข้อมูลลูกค้า มี 2 ฟิวล์ รหัสและ รายชื่อ 6329 records
Table C เป็นข้อมูลสินค้า มี 2 ฟิวล์ รหัสและชื่อสินค้า 109 records

การ join เป็น inner join ธรรมดา ๆ ผ่าน primary key แต่นั้นอาจเป็นเพราะ SQLite ไม่ใช่ Database server อย่าง MySQL ที่มีระบบจัดการที่ดีกว่านั้นเอง

วิธีแก้ไข

  • ทำ Table ที่ใช้เก็บผลลัพธ์ และเลือกข้อมูลมา join ครั้งละไม่มากเกินไป (ถ้า run เกิน 10 นาที แสดงว่ามากเกินไปแล้ว)
  • ใช้ประโยชน์จาก TEMP TABLE
ตัวโปรแกรม SQLite ไม่ได้ห่วย แต่เป็นคนใช้งานที่ห่วยเองครับงานนี้ คงต้องเก็บเกี่ยวประสบการณ์และแก้ไขต่อไปให้ใช้งานได้ดีขึ้นกว่านี้



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

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

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