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

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

Moderator: mindphp

bolue
PHP VIP Members
PHP VIP Members
Posts: 3470
Joined: 04/06/2020 10:05 am

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

Post by bolue »

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

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

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

Code: Select all


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

Code: Select all

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)


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

Code: Select all


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
    Replies
    Views
    Last post

Return to “SQL - Database”

Who is online

Users browsing this forum: No registered users and 8 guests