คำถามติดแท็ก update

UPDATE เปลี่ยนค่าของคอลัมน์ที่ระบุในทุกแถวที่ตรงตามเงื่อนไข เฉพาะคอลัมน์ที่จะแก้ไขเท่านั้นที่ถูกกล่าวถึงใน SET clause คอลัมน์ที่ไม่ได้แก้ไขอย่างชัดเจนเก็บค่าก่อนหน้าของพวกเขา

1
เหตุใดแบบสอบถาม SQL Server ของฉันจึงทำงานต่างจาก UPDATE มากกว่า SELECT
ฉันเขียนแบบสอบถาม SQL Server ที่อัปเดตระเบียนให้มีหมายเลขตามลำดับหลังจากแบ่งพาร์ติชันในเขตข้อมูล เมื่อฉันเรียกใช้เป็นคำสั่ง SELECT ทุกอย่างดูดี: DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 …

1
เป็นวิธีที่มีประสิทธิภาพมากที่สุดในการชุดคำสั่ง UPDATE ใน MySQL คืออะไร?
ฉันกำลังเขียนแอปพลิเคชันที่ต้องการล้างการอัปเดตจำนวนมากไปยังฐานข้อมูลเป็นระยะเวลานานและฉันติดอยู่กับวิธีเพิ่มประสิทธิภาพการสืบค้น ขณะนี้ฉันกำลังใช้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 …
10 mysql  update 

1
วิธีที่มีประสิทธิภาพที่สุดในการเพิ่มคอลัมน์อนุกรมลงในตารางขนาดใหญ่
อะไรที่เร็วที่สุดวิธีการเพิ่มคอลัมน์ BIGSERIAL ไปยังตารางขนาดใหญ่ (~ 3 Bil. แถว ~ 174Gb)? แก้ไข: ฉันต้องการให้คอลัมน์เป็นค่าที่เพิ่มขึ้นสำหรับแถวที่มีอยู่ ( NOT NULL) ฉันไม่ได้ตั้งสารเติม (ซึ่งดูเหมือนว่าจะเป็นการตัดสินใจที่ไม่ดีในการหวนกลับ) ฉันไม่มีปัญหาเกี่ยวกับพื้นที่ดิสก์เพียงต้องการให้เร็วที่สุดเท่าที่จะเป็นไปได้

1
การปรับปรุงการอัพเดทพร้อมกันใน Postgres
ฉันใช้คำสั่ง Postgres พร้อมกันเช่นนี้: UPDATE foo SET bar = bar + 1 WHERE baz = 1234 แบบสอบถามแต่ละรายการมีผลต่อจำนวน K แถวคงที่และฉันไม่สามารถหาวิธีบังคับใช้ลำดับที่แถวนั้นได้รับการอัปเดตได้ฉันจะสิ้นสุดด้วยการหยุดชะงัก ขณะนี้ฉันแก้ไขปัญหาด้วยการบังคับใช้คำสั่งซื้อด้วยตนเอง แต่นั่นหมายความว่าฉันต้องดำเนินการค้นหามากกว่าที่ฉันต้องการในขณะที่เพิ่มความซับซ้อนในการค้นหาจาก O (log N + K) เป็น O (K log N) มีวิธีการปรับปรุงประสิทธิภาพโดยไม่สิ้นสุดความเสี่ยงต่อการหยุดชะงักหรือไม่? ฉันสงสัยว่าการแทนที่(baz)ดัชนีด้วย(baz, id)ดัชนีอาจทำงานได้หาก Postgres อัปเดตแถวในลำดับเดียวกันกับที่สแกนไปแล้วนี่เป็นวิธีการที่คุ้มค่าหรือไม่

2
อัปเดตหลายแถวในตารางด้วยคำสั่งเดียว?
วิธีที่ง่ายที่สุดในการอัปเดตแถวจำนวนมากในตารางคืออะไร ฉันมีไฟล์ csv ที่มีลักษณะเช่นนี้: |primary_key |value| | 1 | xyz| | 2 | abc| | 3 | def| ... แถวที่มีคีย์หลักเหล่านี้มีอยู่แล้วในตารางเป้าหมาย ฉันต้องการอัปเดตตารางเป้าหมายด้วยค่าเหล่านี้ มีไวยากรณ์เพื่อให้ฉันสามารถเขียนสิ่งที่ชอบ: update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3); มองผ่านMySQL ปรับปรุงอ้างอิงไซต์นี้ ( MySQL - ปรับปรุง CSV ) ดังนั้น ( ปรับปรุงหลายแถว , การปรับปรุงฐานข้อมูลหลาย , การปรับปรุงหลายแถว …
9 mysql  update  replace 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.