2012-01-24 31 views
5

Vì dữ liệu cơ sở dữ liệu được tổ chức trong 8k trang trong cây B và tương tự như vậy đối với thông tin thông tin PK, nên có thể cho mỗi bảng trong cơ sở dữ liệu tính toán chiều cao của cây B. Vì vậy, tiết lộ có bao nhiêu bước nhảy để đạt được dữ liệu nhất định.Tìm chiều cao của cây B của bảng trong SQL Server

Vì cả kích cỡ hàng và kích thước PK đều rất quan trọng nên rất khó để tính toán ví dụ: varchar(250) không cần phải mất 250 byte.

1) Có cách nào để lấy thông tin ra khỏi SQL Server không? 2) nếu không, có thể đưa ra ước tính sơ bộ bằng cách sử dụng một số mã phân tích các bảng của db không?

+0

Bạn thậm chí không cần phải biết chiều cao? Không truy cập ngẫu nhiên trong một cấu trúc B-tree gần * 'O (log n)' * bất kể? – Yuck

+0

Vâng, tôi đã nhìn thấy ví dụ về các phím chính thực sự lớn .. chẳng hạn như 2 x GUID + 2 int. Nó sẽ là thú vị để xem hình phạt như vậy ít hơn nhiều phím có thể được lưu trữ trong mỗi trang chỉ mục –

+1

Hãy nhớ rằng chỉ có các bảng với các chỉ mục nhóm được lưu trữ dưới dạng cây B, nếu không có chỉ số nhóm thì bảng được lưu trữ dưới dạng đống. Vì vậy, những gì bạn thực sự muốn biết là chiều cao của cây B cho chỉ số nhóm, do đó, câu trả lời dưới đây cho dm_db_index_physical_stats. –

Trả lời

9

YES! Tất nhiên!

Kiểm tra DMV = dynamic management views trong SQL Server - chúng chứa một kho thông tin về chỉ mục của bạn. Các dm_db_index_physical_stats đặc biệt hữu ích cho nhìn vào tính chỉ số ...

Nếu bạn chạy truy vấn này trong AdventureWorks so với đồng bảng lớn nhất - Sales.SalesOrderDetails với hơn 200'000 hàng - bạn sẽ nhận được một số dữ liệu:

SELECT 
    index_depth, 
    index_level, 
    record_count, 
    avg_page_space_used_in_percent, 
    min_record_size_in_bytes, 
    max_record_size_in_bytes, 
    avg_record_size_in_bytes 
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('Sales.SalesOrderDetail'), 1, NULL, 'DETAILED') 

Bạn sẽ nhận được đầu ra cho tất cả các cấp chỉ mục - vì vậy bạn sẽ thấy một cái nhìn bao nhiêu cấp trong chỉ mục (tôi có ba hàng -> ba cấp trong chỉ mục). Chỉ số Mức 0 luôn là cấp độ lá - trong đó chỉ số nhóm (index_id = 1) bạn có các trang dữ liệu thực tế của bạn.

enter image description here

Bạn có thể thấy tỷ lệ trung bình, tối thiểu và kích thước kỷ lục tối đa trong byte và rất nhiều thông tin bổ sung - đọc lên trên DMV, có một cách tuyệt vời để chẩn đoán và peek vào các hoạt động bên trong SQL Server !

+0

bạn có thể vui lòng tư vấn kích thước đơn hàng của chỉ số B Tree này không? Và làm thế nào máy chủ SQL xác định kích thước thứ tự để sử dụng? Nó chỉ là từ quan điểm tò mò. –

3

thử điều này:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IndexDepth') 
Các vấn đề liên quan