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

1
ฉันจะป้องกัน UNPIVOT ไม่ให้ถูกแปลงเป็น UNION ALL ได้อย่างไร
ฉันมีแบบสอบถามของ Oracle ที่ค่อนข้างซับซ้อนซึ่งใช้เวลาประมาณครึ่งชั่วโมง ถ้าฉันใช้ส่วนที่ช้าของแบบสอบถามและเรียกใช้แยกต่างหากมันจะเสร็จสิ้นในไม่กี่วินาที นี่คือภาพหน้าจอของรายงานการตรวจสอบ SQL สำหรับข้อความค้นหาแยก: นี่คือตรรกะเดียวกันเมื่อเรียกใช้เป็นส่วนหนึ่งของแบบสอบถามแบบเต็ม: สีตรงกับตารางเดียวกันในภาพหน้าจอทั้งสอง สำหรับคำช้า, Oracle จะทำระหว่างสองตารางที่ไม่ได้มีสภาพความเท่าเทียมกันในMERGE JOIN JOINด้วยเหตุนี้จึงมีการประมวลผลแถวกลางประมาณ 150 ล้านแถว ฉันสามารถแก้ไขปัญหานี้ด้วยคำแนะนำการสืบค้นหรือการเขียนใหม่ แต่ฉันต้องการเข้าใจสาเหตุของปัญหาได้มากเท่าที่จะทำได้เพื่อที่ฉันจะได้สามารถหลีกเลี่ยงปัญหานี้ได้ในอนาคตและอาจส่งรายงานข้อผิดพลาดไปยัง Oracle ทุกครั้งที่ฉันได้รับแผนไม่ดีUNPIVOTในข้อความแบบสอบถามจะถูกแปลงเป็นUNION ALLในแผน หากต้องการตรวจสอบเพิ่มเติมฉันต้องการป้องกันไม่ให้เกิดการเปลี่ยนแปลงการค้นหา ฉันไม่สามารถหาชื่อสำหรับการเปลี่ยนแปลงนี้ได้ ฉันยังไม่สามารถค้นหาคำใบ้หรือพารามิเตอร์ขีดล่างที่จะป้องกันได้ ฉันกำลังทดสอบเซิร์ฟเวอร์การพัฒนาเพื่อให้มีอะไรเกิดขึ้น มีอะไรที่ฉันสามารถทำได้เพื่อป้องกันการเปลี่ยนแปลงแบบสอบถามของUNPIVOTการUNION ALL? ฉันใช้ Oracle 12.1.0.2 ฉันไม่สามารถแชร์คิวรีชื่อตารางหรือข้อมูลด้วยเหตุผล IP ฉันไม่สามารถคิดแบบง่าย ๆ ได้ จากที่กล่าวมามันไม่ชัดเจนสำหรับฉันว่าทำไมข้อมูลนั้นจำเป็นต้องใช้ในการตอบคำถาม นี่คือตัวอย่างของแบบสอบถาม UNPIVOT พร้อมกับแบบสอบถามเดียวกันที่ใช้กับ UNION ALL

3
การต่อข้อมูลทางกายภาพ: รับประกันการดำเนินการตามคำสั่งหรือไม่?
ใน SQL มาตรฐานผลลัพธ์ของ a union allไม่ได้รับประกันว่าจะอยู่ในลำดับใด ๆ ดังนั้นสิ่งที่ชอบ: select 'A' as c union all select 'B' สามารถส่งคืนสองแถวในลำดับใดก็ได้ (แม้ว่าในทางปฏิบัติในฐานข้อมูลใด ๆ ที่ฉันรู้ว่า 'A' จะมาก่อน 'B') ใน SQL Server สิ่งนี้จะเปลี่ยนเป็นแผนการดำเนินการโดยใช้การดำเนินการทางกายภาพ "การต่อข้อมูล" ฉันนึกภาพออกได้ง่ายว่าการดำเนินการเรียงต่อกันจะสแกนอินพุตของมันคืนสิ่งที่อินพุตมีบันทึกไว้ อย่างไรก็ตามฉันพบข้อความต่อไปนี้บนเว็บ ( ที่นี่ ): ตัวประมวลผลข้อความค้นหาจะดำเนินการตามแผนนี้ตามลำดับที่ผู้ให้บริการปรากฏในแผนข้อแรกคืออันดับแรกและรายการสุดท้ายคือรายการสุดท้าย คำถาม: จริงหรือไม่ในทางปฏิบัติ สิ่งนี้รับประกันได้ว่าเป็นจริงหรือไม่? ฉันไม่พบการอ้างอิงใด ๆ ในเอกสารประกอบของ Microsoft ที่อินพุตถูกสแกนตามลำดับตั้งแต่ครั้งแรกถึงครั้งสุดท้าย ในทางกลับกันเมื่อใดก็ตามที่ฉันพยายามเรียกใช้ผลลัพธ์แนะนำว่าอินพุตนั้นถูกประมวลผลตามลำดับ มีวิธีที่จะทำให้กระบวนการของเครื่องยนต์มากกว่าหนึ่งอินพุตในแต่ละครั้งหรือไม่? การทดสอบของฉัน (โดยใช้นิพจน์ที่ซับซ้อนกว่าค่าคงที่) อยู่ในเครื่อง 8-core ที่เปิดใช้งานแบบขนานและการสืบค้นส่วนใหญ่จะใช้ประโยชน์จากความขนาน

2
ปัญหาเกี่ยวกับการรวมเลขจำนวนเต็มถึงจำนวน (ทศนิยม)
ฉันมีสถานการณ์นี้ดูเหมือนว่า MySQL ใช้ค่าทศนิยมที่ใหญ่ที่สุดและพยายามที่จะแปลงค่าอื่น ๆ ปัญหาคือว่าแบบสอบถามนี้สร้างขึ้นโดยห้องสมุดภายนอกดังนั้นฉันจึงไม่สามารถควบคุมรหัสนี้ได้ในระดับนี้อย่างน้อย คุณมีความคิดในการแก้ไขปัญหานี้หรือไม่? SELECT 20 AS x UNION SELECT null UNION SELECT 2.2; +------+ | x | +------+ | 9.9 | -- why from 20 to 9.9 | NULL | | 2.2 | +------+ ผลลัพธ์ที่คาดหวัง +------+ | x | +------+ | 20 | -- or 20.0, doesn't …

1
MySQL: เพิ่มประสิทธิภาพยูเนี่ยนด้วย“ ORDER BY” ในการค้นหาภายใน
ฉันเพิ่งตั้งค่าระบบบันทึกซึ่งประกอบด้วยหลายตารางที่มีเค้าโครงเดียวกัน มีตารางหนึ่งตารางสำหรับแหล่งข้อมูลแต่ละแหล่ง สำหรับโปรแกรมดูบันทึกฉันต้องการ ยูเนี่ยนทุกตารางบันทึก , กรองพวกเขาโดยการบัญชี , เพิ่มคอลัมน์หลอกสำหรับการระบุแหล่งที่มา เรียงพวกเขาโดยเวลา , และจำกัด พวกเขาสำหรับการแบ่งหน้า ตารางทั้งหมดมีเขตข้อมูลที่เรียกzeitpunktว่าเป็นคอลัมน์วันที่ / เวลาที่จัดทำดัชนี ความพยายามครั้งแรกของฉันคือ: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.