ความท้าทายที่ฉันเห็นด้วยวิธีแก้ปัญหา:
FROM(
SELECT top(100) *
FROM Customers
UNION
SELECT top(100) *
FROM CustomerEurope
UNION
SELECT top(100) *
FROM CustomerAsia
UNION
SELECT top(100) *
FROM CustomerAmericas
)
คือสิ่งนี้จะสร้างชุดข้อมูลแบบมีหน้าต่างที่จะอยู่ใน RAM และชุดข้อมูลขนาดใหญ่ขึ้นโซลูชันนี้จะสร้างปัญหาประสิทธิภาพการทำงานที่รุนแรงเนื่องจากต้องสร้างพาร์ติชันก่อนจากนั้นจะใช้พาร์ติชันเพื่อเขียนลงในตารางชั่วคราว
ทางออกที่ดีกว่าคือ:
SELECT top(100)* into #tmpFerdeen
FROM Customers
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerEurope
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAsia
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAmericas
เพื่อเลือกแทรกลงในตารางชั่วคราวแล้วเพิ่มแถวเพิ่มเติม อย่างไรก็ตามการดึงกลับมาที่นี่คือถ้ามีแถวที่ซ้ำกันในข้อมูล
ทางออกที่ดีที่สุดจะเป็นดังต่อไปนี้:
Insert into #tmpFerdeen
SELECT top(100)*
FROM Customers
UNION
SELECT top(100)*
FROM CustomerEurope
UNION
SELECT top(100)*
FROM CustomerAsia
UNION
SELECT top(100)*
FROM CustomerAmericas
วิธีนี้ควรใช้ได้กับทุกวัตถุประสงค์ที่ต้องใช้แถวที่ต่างกัน อย่างไรก็ตามหากคุณต้องการแถวที่ซ้ำกันเพียงแค่สลับ UNION สำหรับ UNION ALL
ขอให้โชคดี!