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

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

1
เลื่อนระดับอัปเดต… จำกัด 1
ฉันมีฐานข้อมูล Postgres ซึ่งมีรายละเอียดเกี่ยวกับกลุ่มของเซิร์ฟเวอร์เช่นสถานะเซิร์ฟเวอร์ ('ใช้งาน', 'สแตนด์บาย' ฯลฯ ) เซิร์ฟเวอร์ที่ใช้งานอยู่ตลอดเวลาอาจจำเป็นต้องล้มเหลวในการสแตนด์บายและฉันไม่สนใจว่าจะใช้สแตนด์บายใดเป็นพิเศษ ฉันต้องการคิวรีฐานข้อมูลเพื่อเปลี่ยนสถานะของสแตนด์บาย - เพียงแค่หนึ่ง - และส่งคืน IP ของเซิร์ฟเวอร์ที่จะใช้ การเลือกสามารถโดยพลการ: เนื่องจากสถานะของเซิร์ฟเวอร์เปลี่ยนแปลงด้วยแบบสอบถามจึงไม่สำคัญว่าจะเลือกสแตนด์บายใด เป็นไปได้หรือไม่ที่จะ จำกัด คิวรีของฉันให้อัปเดตเดียว นี่คือสิ่งที่ฉันมี: UPDATE server_info SET status = 'active' WHERE status = 'standby' [[LIMIT 1???]] RETURNING server_ip; Postgres ไม่ชอบสิ่งนี้ ฉันจะทำอะไรที่แตกต่างกัน

4
จะอัปเดตหนึ่งตารางตามค่าของตารางอื่นได้อย่างไร
ฉันมีตารางในชื่อ ips ดังต่อไปนี้: CREATE TABLE `ips` ( `id` int(10) unsigned NOT NULL DEFAULT '0', `begin_ip_num` int(11) unsigned DEFAULT NULL, `end_ip_num` int(11) unsigned DEFAULT NULL, `iso` varchar(3) DEFAULT NULL, `country` varchar(150) DEFAULT NULL ) ENGINE=InnoDB สมมติว่าฉันมีcountryidฟิลด์ในตารางนี้จากตารางประเทศซึ่งเป็นด้านล่าง: CREATE TABLE `country` ( `countryid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8 …
40 mysql  update 

2
การปรับปรุงประสิทธิภาพการอัปเดตเป็นกลุ่มใน PostgreSQL
ใช้ PG 9.1 บน Ubuntu 12.04 ขณะนี้เราใช้เวลาถึง 24 ชั่วโมงในการเรียกใช้ชุดคำสั่ง UPDATE จำนวนมากบนฐานข้อมูลซึ่งเป็นรูปแบบ: UPDATE table SET field1 = constant1, field2 = constant2, ... WHERE id = constid (เราแค่เขียนทับฟิลด์ของวัตถุที่ระบุด้วย ID) ค่ามาจากแหล่งข้อมูลภายนอก (ยังไม่ได้อยู่ในฐานข้อมูลในตาราง) ตารางมีดัชนีไม่กี่ข้อและไม่มีข้อ จำกัด ของรหัสต่างประเทศ ไม่มีการกระทำใด ๆ จนกว่าจะสิ้นสุด ใช้เวลา 2 ชั่วโมงในการนำเข้าpg_dumpฐานข้อมูลทั้งหมด ดูเหมือนว่าพื้นฐานนี้เราควรตั้งเป้าหมายอย่างสมเหตุสมผล ขาดการผลิตโปรแกรมที่กำหนดเองซึ่งสร้างชุดข้อมูลสำหรับ PostgreSQL เพื่อนำเข้าอีกครั้งมีอะไรที่เราสามารถทำได้เพื่อให้ประสิทธิภาพการอัพเดทจำนวนมากใกล้เคียงกับการนำเข้าหรือไม่ (นี่คือพื้นที่ที่เราเชื่อว่าต้นไม้ที่ผสานโครงสร้างบันทึกการจัดการดี แต่เราสงสัยว่ามีอะไรที่เราสามารถทำได้ภายใน PostgreSQL) ความคิดบางอย่าง: วางดัชนีที่ไม่ใช่ ID ทั้งหมดและสร้างใหม่ในภายหลังหรือไม่ การเพิ่ม …

6
วิธีอัปเดต 10 ล้านแถวใน MySQL ตารางเดียวเร็วที่สุด
ใช้ MySQL 5.6 กับเครื่องมือจัดเก็บข้อมูล InnoDB สำหรับตารางส่วนใหญ่ ขนาดบัฟเฟอร์พูล InnoDB คือ 15 GB และดัชนี Innodb DB + มีขนาดประมาณ 10 GB เซิร์ฟเวอร์มี RAM 32GB และใช้งาน Cent OS 7 x64 ฉันมีตารางใหญ่หนึ่งตารางที่มีเร็กคอร์ดประมาณ 10 ล้านรายการ ฉันได้รับไฟล์ดัมพ์ที่อัปเดตจากเซิร์ฟเวอร์ระยะไกลทุก 24 ชั่วโมง ไฟล์อยู่ในรูปแบบ csv ฉันไม่สามารถควบคุมรูปแบบนั้นได้ ไฟล์นี้มีขนาด ~ 750 MB ฉันพยายามแทรกข้อมูลลงในตาราง MyISAM แบบแถวต่อแถวและใช้เวลา 35 นาที ฉันต้องใช้เพียง 3 ค่าต่อบรรทัดจาก 10-12 จากไฟล์และอัปเดตในฐานข้อมูล อะไรคือวิธีที่ดีที่สุดในการบรรลุสิ่งนี้ …

5
ปรับปรุงประสิทธิภาพที่ไม่มีข้อมูลเปลี่ยนแปลง
ถ้าฉันมีUPDATEคำสั่งที่ไม่ได้เปลี่ยนข้อมูลใด ๆ (เพราะข้อมูลอยู่ในสถานะที่ปรับปรุงแล้ว) มีประโยชน์ด้านประสิทธิภาพใด ๆ ในการวางการตรวจสอบในWHEREข้อเพื่อป้องกันการอัพเดตหรือไม่? ตัวอย่างเช่นจะมีความแตกต่างในความเร็วการดำเนินการระหว่าง UPDATE 1 และ UPDATE 2 ในสิ่งต่อไปนี้: CREATE TABLE MyTable (ID int PRIMARY KEY, Value int); INSERT INTO MyTable (ID, Value) VALUES (1, 1), (2, 2), (3, 3); -- UPDATE 1 UPDATE MyTable SET Value = 2 WHERE ID = 2 AND Value <> …

4
การอัพเดตแถวด้วยค่าเดียวกันอัพเดตแถวจริงหรือไม่?
ฉันมีคำถามเกี่ยวกับประสิทธิภาพ สมมติว่าฉันมีผู้ใช้ชื่อ Michael ใช้แบบสอบถามต่อไปนี้: UPDATE users SET first_name = 'Michael' WHERE users.id = 123 แบบสอบถามจะดำเนินการอัปเดตจริงหรือไม่แม้ว่าจะมีการอัปเดตเป็นค่าเดียวกันหรือไม่ ถ้าเป็นเช่นนั้นฉันจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

3
วิธีเพิ่มประสิทธิภาพฐานข้อมูลสำหรับ I / O หนักจากการอัปเดต (ซอฟต์แวร์และฮาร์ดแวร์)
สถานการณ์ ฉันมีฐานข้อมูล postgresql 9.2 ซึ่งค่อนข้างมีการปรับปรุงอย่างมากตลอดเวลา ระบบจึงถูก จำกัด ด้วย I / O และตอนนี้ฉันกำลังพิจารณาที่จะอัพเกรดอีกครั้งฉันแค่ต้องการทิศทางที่จะเริ่มปรับปรุง นี่คือภาพว่าสถานการณ์ดู 3 เดือนที่ผ่านมาได้อย่างไร: อย่างที่คุณเห็นอัปเดตบัญชีการปฏิบัติงานสำหรับการใช้งานดิสก์ส่วนใหญ่ นี่เป็นอีกภาพของการมองสถานการณ์ในหน้าต่าง 3 ชั่วโมงที่มีรายละเอียดมากขึ้น: อย่างที่คุณเห็นอัตราการเขียนสูงสุดคือประมาณ 20MB / s ซอฟต์แวร์ เซิร์ฟเวอร์กำลังใช้งาน Ubuntu 12.04 และ postgresql 9.2 ประเภทของการอัปเดตจะมีการอัปเดตขนาดเล็กตามปกติในแต่ละแถวที่ระบุโดย ID UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_idเช่น ฉันได้ลบและปรับดัชนีให้มากที่สุดเท่าที่ฉันคิดว่าเป็นไปได้และการกำหนดค่าเซิร์ฟเวอร์ (ทั้งเคอร์เนล linux และ postgres conf) ก็ปรับให้เหมาะสมเช่นกัน …

2
ค่าใช้จ่ายในการอัปเดตคอลัมน์ทั้งหมดคืออะไรแม้แต่คนที่ไม่ได้เปลี่ยนแปลง [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา เมื่อพูดถึงการอัพเดตแถวเครื่องมือ ORM จำนวนมากออกคำสั่ง UPDATE ที่ตั้งค่าทุกคอลัมน์ที่เกี่ยวข้องกับเอนทิตีนั้น ข้อดีคือคุณสามารถแบทช์ข้อความสั่งการอัพเดทได้อย่างง่ายดายเนื่องจากUPDATEข้อความนั้นเหมือนกันไม่ว่าคุณจะเปลี่ยนเอนทิตีแอตทริบิวต์ใด ยิ่งไปกว่านั้นคุณยังสามารถใช้การแคชคำสั่งฝั่งเซิร์ฟเวอร์และไคลเอนต์ได้เช่นกัน ดังนั้นถ้าฉันโหลดเอนทิตีและตั้งค่าคุณสมบัติเดียวเท่านั้น: Post post = entityManager.find(Post.class, 1L); post.setScore(12); คอลัมน์ทั้งหมดจะมีการเปลี่ยนแปลง: UPDATE post SET score = 12, title = 'High-Performance Java Persistence' WHERE id = 1 ทีนี้สมมติว่าเรามีดัชนีในtitleคุณสมบัติเช่นกันฐานข้อมูลไม่ควรตระหนักว่ามูลค่าไม่เปลี่ยนแปลง ในบทความนี้ Markus Winand พูดว่า: การอัปเดตในคอลัมน์ทั้งหมดแสดงรูปแบบเดียวกับที่เราสังเกตเห็นแล้วในส่วนก่อนหน้า: เวลาตอบสนองจะเพิ่มขึ้นพร้อมกับดัชนีเพิ่มเติมแต่ละรายการ ฉันสงสัยว่าทำไมโอเวอร์เฮดนี้เนื่องจากฐานข้อมูลโหลดหน้าข้อมูลที่เกี่ยวข้องจากดิสก์ไปยังหน่วยความจำและเพื่อให้สามารถทราบได้ว่าค่าคอลัมน์จำเป็นต้องเปลี่ยนหรือไม่ แม้สำหรับดัชนีก็ไม่ต้องปรับสมดุลอะไรเลยเนื่องจากค่าดัชนีไม่เปลี่ยนแปลงสำหรับคอลัมน์ที่ไม่ได้เปลี่ยนแปลง แต่รวมอยู่ในการอัพเดท เป็นดัชนี B + …

3
ผลกระทบของดัชนีในคำสั่งการอัพเดทที่คอลัมน์อัพเดตไม่ได้อยู่ในดัชนี
ฉันตลอดเวลาเห็นคนบอกว่าดัชนีชะลอตัวลงupdate, และdelete insertสิ่งนี้ถูกใช้เป็นคำสั่งแบบครอบคลุมราวกับว่ามันเป็นค่าสัมบูรณ์ ในขณะที่ปรับฐานข้อมูลของฉันเพื่อปรับปรุงประสิทธิภาพฉันยังคงเจอกับสถานการณ์นี้ที่ขัดแย้งกับกฎอย่างมีเหตุผลสำหรับฉันและไม่มีที่ไหนที่ฉันสามารถหาใครพูดหรืออธิบายในทางใดทางหนึ่ง ใน SQL Server และฉันเชื่อ / เข้าใจ DBMS อื่น ๆ ส่วนใหญ่ดัชนีของคุณจะถูกสร้างขึ้นตามคอลัมน์เฉพาะที่คุณระบุ ส่วนแทรกและการลบจะมีผลกับทั้งแถวเสมอดังนั้นจึงไม่มีวิธีที่จะไม่ส่งผลกระทบต่อดัชนี แต่การปรับปรุงดูเหมือนจะมีความเป็นเอกลักษณ์มากกว่านี้เล็กน้อย หากฉันมีคอลัมน์ที่ไม่รวมอยู่ในดัชนีใด ๆ และฉันอัปเดตพวกเขาจะชะลอตัวลงเพียงเพราะฉันมีดัชนีในคอลัมน์อื่น ๆ ในตารางนั้นหรือไม่ ตัวอย่างเช่นพูดในUserตารางของฉันฉันมีหนึ่งหรือสองดัชนีคีย์หลักซึ่งเป็นคอลัมน์ Identity / Auto เพิ่มคอลัมน์และอาจอื่นในคอลัมน์บางคีย์ต่างประเทศ หากฉันอัปเดตคอลัมน์ที่ไม่มีดัชนีโดยตรงเช่นพูดว่าหมายเลขโทรศัพท์หรือที่อยู่การอัปเดตนี้จะช้าลงเพราะฉันมีดัชนีในตารางนี้ในคอลัมน์อื่น ๆ ในสถานการณ์ใดสถานการณ์หนึ่งหรือไม่ คอลัมน์ที่ฉันกำลังอัปเดตไม่ได้อยู่ในดัชนีดังนั้นเหตุผลที่ควรอัปเดตดัชนีไม่ควรใช่ไหม ถ้ามีอะไรฉันคิดว่ามันจะถูกเร่งถ้าฉันใช้ดัชนีในส่วนคำสั่ง WHERE

3
อัปเดตช้าในตารางขนาดใหญ่พร้อมแบบสอบถามย่อย
เมื่อSourceTableมีระเบียน> 15MM และBad_Phraseมีระเบียน> 3K แบบสอบถามต่อไปนี้จะใช้เวลาเกือบ 10 ชั่วโมงในการเรียกใช้บน SQL Server 2005 SP4 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) ในภาษาอังกฤษคำนี้คือการนับจำนวนของวลีที่แตกต่างกันการระบุไว้ใน Bad_Phrase ที่มี substring ของสนามNameในแล้ววางผลว่าในสนามSourceTableBad_Count ฉันต้องการคำแนะนำเกี่ยวกับวิธีทำให้แบบสอบถามนี้ทำงานได้เร็วขึ้นอย่างมาก

3
SQL Server: วิธีการปิดการใช้งานทริกเกอร์สำหรับการปรับปรุงสำหรับเซสชั่นปัจจุบันของคุณเท่านั้น?
ฉันกำลังทำงานกับ SQL Server 2008 R2 ผมมีตารางผลประโยชน์ที่มีหลัง INSERT, UPDATE ทริกเกอร์ชื่อtiu_benefit ฉันต้องการเขียนคำสั่ง UPDATE สำหรับตารางนี้เพื่ออัปเดต 1 แถว แต่ฉันไม่ต้องการให้ทริกเกอร์เริ่มทำงาน ฉันรู้ว่าฉันสามารถปิดการใช้งานทริกเกอร์ก่อน UPDATE แล้วเปิดใช้ทริกเกอร์หลัง UPDATE: DISABLE TRIGGER tiu_benefit ON benefit; GO UPDATE benefit SET editor = 'srh' where benefit_id = 9876 GO ENABLE TRIGGER tiu_benefit ON benefit; GO แต่สิ่งนี้จะปิดการใช้งานและเปิดใช้งานทริกเกอร์จะส่งผลกระทบต่อผู้ใช้ทั้งหมดที่เข้าสู่ระบบในปัจจุบัน ดังนั้นจึงมีความเป็นไปได้ที่ผู้ใช้รายอื่นเรียกใช้ UPDATE / INSERT ในขณะที่ทริกเกอร์ถูกปิดใช้งานโดยสคริปต์ของฉันซึ่งไม่ดี นั่นเป็นเหตุผลที่ฉันต้องการปิดใช้งานและเปิดใช้งานทริกเกอร์สำหรับเซสชันปัจจุบันของฉันเท่านั้น เป็นไปได้ไหม? …

2
ความลึกของลูกหลานแบบเรียกซ้ำ PostgreSQL
ฉันต้องคำนวณความลึกของลูกหลานจากบรรพบุรุษของมัน เมื่อมีการบันทึกobject_id = parent_id = ancestor_idจะถือว่าเป็นโหนดรูท (บรรพบุรุษ) ผมได้พยายามที่จะได้รับWITH RECURSIVEการสอบถามการทำงานกับ PostgreSQL 9.4 ฉันไม่ได้ควบคุมข้อมูลหรือคอลัมน์ data และ schema ของตารางมาจากแหล่งภายนอก ตารางจะเติบโตอย่างต่อเนื่อง ตอนนี้บันทึกประมาณ 30k ต่อวัน โหนดใด ๆ ในทรีสามารถหายไปและพวกเขาจะถูกดึงจากแหล่งภายนอกในบางจุด พวกเขามักจะถูกดึงcreated_at DESCตามลำดับ แต่ข้อมูลจะถูกดึงด้วยงานพื้นหลังแบบอะซิงโครนัส เริ่มแรกเรามีวิธีแก้ไขปัญหาของรหัส แต่ตอนนี้มี 5M + แถวใช้เวลาเกือบ 30 นาทีจึงจะเสร็จสมบูรณ์ ตัวอย่างคำจำกัดความของตารางและข้อมูลการทดสอบ: CREATE TABLE objects ( id serial NOT NULL PRIMARY KEY, customer_id integer NOT NULL, object_id integer …

1
การปรับปรุงดัชนีที่ไม่ซ้ำกันและเคาน์เตอร์แก้ไขแถวสถิติ
รับตารางต่อไปนี้ดัชนีคลัสเตอร์ที่ไม่ซ้ำกันและสถิติ: CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

2
คีย์ที่ซ้ำกันไม่ทำอะไรเลย
ฉันกำลังแทรกลงในตารางต่อไปนี้โดยใช้ LuaSQL กับ PtokaX API CREATE TABLE `requests` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ctg` VARCHAR(15) NOT NULL, `msg` VARCHAR(250) NOT NULL, `nick` VARCHAR(32) NOT NULL, `filled` ENUM('Y','N') NOT NULL DEFAULT 'N', `dated` DATETIME NOT NULL, `filldate` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nick_msg` (`nick`, `msg`), …

1
ไม่สามารถแทรกแถวคีย์ซ้ำในดัชนีที่ไม่ซ้ำกันใช่ไหม
เราพบข้อผิดพลาดแปลก ๆ สามครั้งในช่วงสองสามวันที่ผ่านมาหลังจากปราศจากข้อผิดพลาดเป็นเวลา 8 สัปดาห์และฉันก็นิ่งงัน นี่คือข้อความแสดงข้อผิดพลาด: Executing the query "EXEC dbo.MergeTransactions" failed with the following error: "Cannot insert duplicate key row in object 'sales.Transactions' with unique index 'NCI_Transactions_ClientID_TransactionDate'. The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).". ดัชนีที่เรามีไม่ซ้ำกัน หากคุณสังเกตเห็นค่าคีย์ที่ซ้ำกันในข้อความแสดงข้อผิดพลาดจะไม่ตรงกับดัชนี สิ่งที่แปลกคือถ้าฉันเรียกใช้ proc อีกครั้งมันก็ประสบความสำเร็จ นี่คือลิงค์ล่าสุดที่ฉันพบว่ามีปัญหาของฉัน แต่ฉันไม่เห็นวิธีแก้ปัญหา https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index สองสามสิ่งเกี่ยวกับสถานการณ์ของฉัน: Proc กำลังอัปเดต TransactionID (ส่วนหนึ่งของคีย์หลัก) …

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