วิธี optimize การ insert หรือ update ข้อมูลใรครั้งเดียว เพื่อให้ระบบสามารถทำงานได้เร็วขึ้น

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

วิธี optimize การ insert หรือ update ข้อมูลใรครั้งเดียว เพื่อให้ระบบสามารถทำงานได้เร็วขึ้น

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ในการเขียนระบบ หากมีการทำงานกับ database หลายครั้ง เช่นการวน for แล้วในการวน for แต่ละครั้งมีการ insert หรือ update ข้อมูลไปฝั่ง database ก็จะทำให้ระบบของเรามีการทำงานที่ค่อนข้างช้าลง แต่หากว่า มีการวน for เพื่อเก็ยข้อมูลเป็นร้อยเป็นพันก่อน แล้วค่อยทำการ insert หรือ update ภายในครั้งเดียวจะสามารถประหยัดเวลาได้เป็นอย่างมาก

ต้วอย่าง โครงสร้าง code เก่า ก่อนทำการ optimize

สมมติมีการทำงาน ให้สร้าง 200 record จะได้เวลาประมาณ เกือบ 1 นาที หรือมากกว่านั้น

โค้ด: เลือกทั้งหมด


for move in val_id:
 		val = move.name
                data_to_sql.append(val)
                 sql = """ INSERT INTO table (name) VALUES (%s)"""
                 cr.execute(sql, val)
โครงสร้างหลัง จาก optimize
หาก ให้สร้าง 200 record จะได้เวลาประมาณ 0.632

โค้ด: เลือกทั้งหมด

data_to_sql = []
for move in val_id:
 		val = (move.name)
                data_to_sql.append(val)

sql = """ INSERT INTO table (name) VALUES (%s)"""
cr.executemany(sql, data_to_sql)


การอัปเดทหลายค่าพร้อมกันโดยที่มีการทำการอัปเดทข้อมูลที่แตกต่างการทั้งหมด

โค้ด: เลือกทั้งหมด


str_product_uom = ''
for move in complete:
                str_product_uom += '\n When ' +  'ไอดีที่จะให้อัปเดท'  + ' Then ' + 'ค่าที่ต้องการจะให้อัปเดทของไอดีนั้น')
              
set_product_uom = 'product_uom = \n' \
                                 'CASE id \n' \
                                 + str_product_uom + '\n END \n'

cr.execute("UPDATE stock_move set "+sql+" where id in %s", (tuple(move_id),))

โดยการอัปเดทค่าจะมีการอัปเดทอีกวิธีนึง คือการ CONFLICT ของ postgrest viewtopic.php?p=211966#p211966 จะสามารถทำงานได้เหมือนกันโดยวิธีนี้จะเป็นการ insert ข้อมูล และหากมีไอดีนี้อยู่แล้วจะเปลี่ยนเป็นการ update แทน ใช้ได้กับ id ที่เป็น pk
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 77