การแทรกหลายแถวเทียบกับการแทรกแถวเดี่ยวหลายครั้ง


9

ในแอพของฉันฉันจะแทรกหลายแถวเมื่อฉันทำได้เพราะมันช่วยลดจำนวนรอบการเดินทางระหว่างฐานข้อมูลและแอป

อย่างไรก็ตามฉันอยากรู้อยากเห็นมีข้อดีอื่น ๆ อีกไหม? ตัวอย่างเช่นหากมีการแทรกหลายแถวพร้อมกันเช่นนี้

insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)

เมื่อเทียบกับ:

insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)

และตารางมีดัชนีดัชนีคำนวณหนึ่งครั้งในกรณีแรกและสองครั้งในกรณีที่สองหรือไม่ หรือมันมักจะใส่ครั้งเดียวต่อ? สมมติว่าแบบสอบถามทั้งสองอยู่ในธุรกรรมเดียวกัน

ฉันใช้ PostgreSQL


2
ฉันคิดว่าดัชนีมีการปรับปรุงก็หนึ่งครั้งต่อคำสั่งไม่ได้เมื่อต่อแถว ดังนั้นข้อความเดี่ยวควรมีประสิทธิภาพมากกว่าทั้งสองข้อความ แต่ฉันไม่แน่ใจ (ดังนั้นไม่มีคำตอบเพียงความเห็น)
a_horse_with_no_name

1
ฉันคิดว่าคำถามที่ถูกต้องคือมันถูกห่อหุ้มในการทำธุรกรรมเดียวกัน ออกจากท้องถ้ามีทั้งในการทำธุรกรรมจะไม่แตกต่างกัน
user1363989

@ user1363989 ฉันได้อัปเดตคำถามของฉันเพื่อระบุว่าการสืบค้นทั้งสองจะอยู่ในรายการเดียวกัน
cdmckay

คำตอบ:


5

ฉันคิดว่า @a_horse_with_no_name นั้นถูกต้องเกี่ยวกับว่าดัชนีนั้นได้รับการอัปเดตครั้งเดียวต่อคำสั่งเพราะถ้าคำสั่งนั้นยังไม่เสร็จสิ้นการดำเนินการข้อมูลจะไม่สามารถมองเห็นได้เนื่องจากอยู่ในธุรกรรม และคำจำกัดความของคำสั่งรวมถึงการมีหลายค่า

และสอดคล้องกับเอกสารที่นี่การสร้าง / ปรับปรุงดัชนีจะทำงานได้อย่างมีประสิทธิภาพมากขึ้นด้วยแบทช์มากกว่าคำสั่งเดียว

นอกจากนี้ยังมีบทความดีๆจากPeter Manisเกี่ยวกับประสิทธิภาพของวิธีการแทรกแบบต่างๆที่ฉันสามารถแนะนำได้

สิ่งที่จะต้องเก็บไว้ในใจก็คือFILLFACTORของดัชนีในขณะที่มันจะมีผลกระทบต่อประสิทธิภาพการทำงานเป็น Fabien Coelho อธิบายที่นี่


หากแบบสอบถามเป็นชุดในการทำธุรกรรมการปรับปรุงดัชนีจะเกิดขึ้นครั้งเดียวต่อคำสั่งหรือไม่ จะมีความแตกต่างด้านประสิทธิภาพเนื่องจากสิ่งอื่นใดอีกหรือไม่ ฉันไม่สามารถเข้าถึงบทความใด: คุณกรุณาลิงค์อีกครั้งได้ไหม
batbrat

1

ฉันไม่เชื่อว่าขณะนี้มีความแตกต่างการเพิ่มประสิทธิภาพในพื้นที่ของการบำรุงรักษาดัชนีในเรื่องนี้

นอกเหนือจากเครือข่ายค่าใช้จ่ายข้อดีอื่น ๆ ของคำสั่งหลายค่าอยู่ในการแยกวิเคราะห์การล็อค ฯลฯ (แม้ว่าการล็อคตารางtblจะถูกดำเนินการโดยคำสั่งแทรกครั้งแรกแล้วเก็บรักษาไว้ตลอดรายการที่เหลือแทรกแต่ละครั้ง คำสั่งยังคงต้องตรวจสอบว่ามีการล็อคและการตรวจสอบนี้ไม่ฟรี)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.