ฉันกำลังเขียนแอปพลิเคชันที่ต้องการล้างการอัปเดตจำนวนมากไปยังฐานข้อมูลเป็นระยะเวลานานและฉันติดอยู่กับวิธีเพิ่มประสิทธิภาพการสืบค้น ขณะนี้ฉันกำลังใช้INSERT INTO ... VALUES (..), (..) ON DUPLICATE KEY UPDATE
ซึ่งทำงานเพื่อแบทช์ค่าทั้งหมดเป็นหนึ่งแบบสอบถาม แต่ดำเนินการช้าๆเลือดตาแทบกระเด็นบนตารางขนาดใหญ่ ฉันไม่จำเป็นต้องแทรกแถวจริงๆ
วิธีอื่นที่ฉันเห็นคือการอัปเดตโดยใช้SET value = CASE WHEN...
(ซึ่งยากที่จะสร้างเนื่องจากวิธีที่ฉันสร้างคิวรีและฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพCASE
ของคีย์หลายแสน / พันปุ่ม) และเรียงต่อกันหลาย ๆ อย่าง การปรับปรุง สิ่งเหล่านี้จะเร็วกว่าวิธีการปัจจุบันของฉันหรือไม่
มันทำให้ฉันงุนงงเท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีที่มีประสิทธิภาพและไร้เหตุผลในการทำสิ่งนี้ใน MySQL หากไม่มีวิธีที่เร็วกว่าจริงON DUPLICATE KEY
ๆ มันจะคุ้มไหมที่จะเปลี่ยนมาใช้ PostgreSQL และใช้UPDATE FROM
ไวยากรณ์ของมัน
คำแนะนำอื่น ๆ ยังชื่นชมอย่างมาก!
แก้ไข: นี่คือหนึ่งในตารางที่ได้รับการปรับปรุงบ่อยครั้ง ฉันได้ลบชื่อคอลัมน์เนื่องจากไม่เกี่ยวข้อง
CREATE TABLE IF NOT EXISTS `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` bigint(20) unsigned NOT NULL DEFAULT '0',
`b` bigint(20) unsigned NOT NULL DEFAULT '0',
`c` enum('0','1','2') NOT NULL DEFAULT '0',
`d` char(32) NOT NULL,
-- trimmed --
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`),
KEY `c` (`c`),
KEY `d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;