ความแตกต่างของประสิทธิภาพ INSERT ระหว่างตารางชั่วคราวและตัวแปรตาราง


12

ฉันมีปัญหาดังต่อไปนี้ใน SQL Server 2005: การพยายามแทรกแถวบางแถวในตัวแปรตารางใช้เวลานานเมื่อเทียบกับการแทรกแบบเดียวกันโดยใช้ตารางชั่วคราว

นี่คือรหัสที่จะแทรกลงในตัวแปรตาราง

DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...

นี่คือรหัสที่จะแทรกลงในตารางอุณหภูมิ

CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data

ตารางชั่วคราวไม่มีคีย์หรือดัชนีใด ๆ ส่วนที่เลือกจะเหมือนกันระหว่าง 2 แบบสอบถามและจำนวนผลลัพธ์ที่ส่งคืนโดยการเลือกคือ ~ 10,000 แถว เวลาที่ใช้ในการดำเนินการเลือกอย่างเดียวคือ ~ 10 วินาที

เวอร์ชันของ temp table ใช้เวลาในการรันสูงสุด 10 วินาทีฉันต้องหยุดเวอร์ชันตัวแปร table หลังจาก 5 นาที

ฉันต้องใช้ตัวแปรตารางเนื่องจากแบบสอบถามเป็นส่วนหนึ่งของฟังก์ชันค่าตารางที่ไม่อนุญาตให้เข้าถึงตารางชั่วคราว

แผนการดำเนินการสำหรับเวอร์ชันตัวแปรตาราง แผนการดำเนินการ

แผนการดำเนินการสำหรับเวอร์ชันตาราง temp แผนการดำเนินการ

คำตอบ:


8

ความแตกต่างที่ชัดเจนระหว่างสองแผนคือความรวดเร็วหนึ่งขนานและช้ากว่าหนึ่งอนุกรม

นี่เป็นหนึ่งในข้อ จำกัด ของแผนที่แทรกลงในตัวแปรตาราง ตามที่ระบุไว้ในความคิดเห็น (และดูเหมือนว่ามันมีผลที่ต้องการ) คุณสามารถลองทำ

INSERT INTO @DATA ( ... ) 
EXEC('SELECT .. FROM ...')

เพื่อดูว่าที่ได้รับรอบข้อ จำกัด


มันเป็นข้อเสนอแนะที่ดีแม้ว่าฉันจะคิดว่าคุณไม่สามารถใช้งานEXECฟังก์ชั่นนี้ได้ แต่เดาว่าฉันผิด
Lamak

1
@Lamak - Doh! คุณไม่สามารถทำเช่นนี้จะไม่ทำงานสำหรับ OP Invalid use of a side-effecting operator 'INSERT EXEC' within a function.. ทำงานรอบการทำงานอาจแม้ว่า OPENQUERY
Martin Smith

อารู้ดีขอบคุณสำหรับการชี้แจง
Lamak

2
ตามกฎทั่วไปแล้วคุณไม่ต้องการใช้ตัวแปรตารางหากคุณคาดว่าจะได้รับ aset ข้อมูลขนาดใหญ่กลับมา ตารางชั่วคราวมักจะเร็วกว่าในกรณีนี้
HLGEM

1
@unissor จากนั้นอย่าใช้ฟังก์ชันที่มีค่าเป็นตาราง หากคุณต้องการคำแนะนำที่ดีกว่าโพสต์สิ่งที่คุณทำ
HLGEM

-1

ตัวแปรตารางบางครั้งช้าลงเนื่องจากไม่มีสถิติเกี่ยวกับตัวแปรตารางดังนั้นเครื่องมือเพิ่มประสิทธิภาพจะถือว่ามีเพียงหนึ่งระเบียนเท่านั้น

อย่างไรก็ตามฉันไม่สามารถรับประกันได้ว่านี่เป็นกรณีที่นี่คุณจะต้องดูข้อมูล "แถวโดยประมาณ" ในแผนแบบสอบถามสำหรับตัวแปรตาราง


สิ่งนั้นจะส่งผลต่อการแทรกลงในตัวแปรตารางอย่างไร
Martin Smith

นั่นคือสิ่งที่ดูเหมือนจะเกิดขึ้นในขณะที่คุณเห็นว่ามีไม่เพียงความแตกต่างระหว่างขนานและอนุกรม แต่ยังระหว่างการแฮชและซ้อนกันเข้าร่วมวงเห็นได้ชัดว่าเครื่องมือเพิ่มประสิทธิภาพสันนิษฐานว่าเนื่องจากตัวแปรตารางถือหนึ่งระเบียนในใจแล้วผล ของแบบสอบถามจะเป็นหนึ่งระเบียนอีกวิธีเดียวที่จะพิสูจน์ว่าเป็นสถิติจริงสำหรับแต่ละส่วนของแบบสอบถาม แต่ความจริงก็คือว่าแบบสอบถามทั้งหมดที่เกี่ยวข้องกับตัวแปรตารางจบลงด้วยการรวมวนและการประมวลผลแบบอนุกรม ดังนั้นฉันคิดว่ามันยุติธรรมที่จะสงสัยที่นี่
yoel halb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.