การสุ่มตัวอย่างทำงานอย่างไรเมื่ออัปเดตสถิติ


10

ฉันมีโต๊ะขนาดใหญ่หลายแห่ง ฉันต้องการตรวจสอบให้แน่ใจว่าสถิติของพวกเขาเป็นข้อมูลล่าสุดผ่านแผนการบำรุงรักษารายสัปดาห์

อย่างไรก็ตามการทำเช่นนั้นใช้เวลามากเกินไป

ถ้าฉันระบุ

WITH SAMPLE 50 PERCENT

ทำ SQL Server แล้วตัวอย่าง:

  1. 50% แรกของหน้า
  2. หน้าอื่น ๆ
  3. หรือกลยุทธ์อื่น ๆ

BOLไม่ชัดเจนในเรื่องนี้

คำตอบ:


16

สำหรับการWITH SAMPLE 50 PERCENTทำงานราวกับว่าสำหรับแต่ละหน้าข้อมูลในตาราง SQL Server พลิกเหรียญ ถ้ามันตกลงมาหัวก็จะอ่านแถวทั้งหมดในหน้า ถ้ามันตกลงไปมันจะไม่อ่านเลย

การติดตามการUPDATE STATISTICS T WITH SAMPLE 50 PERCENTโทรใน Profiler จะแสดงเคียวรีต่อไปนี้

SELECT StatMan([SC0], [SB0000])
FROM   (SELECT TOP 100 PERCENT [SC0],
                               step_direction([SC0]) OVER (ORDER BY NULL) AS [SB0000]
        FROM   (SELECT [C] AS [SC0]
                FROM   [dbo].[T] TABLESAMPLE SYSTEM (5.000000e+001 PERCENT) 
                WITH (READUNCOMMITTED)) AS _MS_UPDSTATS_TBL_HELPER
        ORDER  BY [SC0],
                  [SB0000]) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1) 

ด้วยแผน

ป้อนคำอธิบายรูปภาพที่นี่

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)เป็นผู้รับผิดชอบสำหรับการสุ่มตัวอย่างและเป็นเอกสารที่นี่

TABLESAMPLE SYSTEMส่งคืนเปอร์เซ็นต์ของแถวโดยประมาณและสร้างค่าสุ่มสำหรับแต่ละหน้าขนาด 8-KB ในตาราง ขึ้นอยู่กับค่าสุ่มสำหรับหน้าและร้อยละที่ระบุในแบบสอบถามหน้าจะรวมอยู่ในตัวอย่างหรือยกเว้น แต่ละหน้าที่รวมจะส่งคืนแถวทั้งหมดในชุดผลลัพธ์ตัวอย่าง

เอกสารยังระบุ

แม้ว่าแผนจะแสดงการสแกนตารางจะดำเนินการเฉพาะหน้าเว็บที่รวมอยู่ในชุดผลลัพธ์เท่านั้นที่จำเป็นต้องอ่านจากไฟล์ข้อมูล

การSTATMANโทรคือฟังก์ชั่นการรวมภายในที่อธิบายไว้สั้น ๆ ที่นี่

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