2010-04-29 22 views
6

tôi đã tạo chế độ xem cho dự án của mình bây giờ tôi muốn tối ưu hóa chúng cho mục đích tốc độ ... làm cách nào tôi có thể xác định rằng chế độ xem có thể tối ưu hóa? là chỉ số hữu ích cho việc này ....Làm thế nào tôi có thể tối ưu hóa lượt xem trong máy chủ sql cho tốc độ

let's say the following example... 

    SELECT  dbo.vw_WebInventory.skref AS SaleID, dbo.vw_WebInventory.lot_number AS LotNumber, dbo.vw_WebInventory.Description, 
          dbo.vw_WebInventory.Image AS HasImage, dbo.vw_WebInventory.Sold, dbo.vw_WebInventory.Withdrawn, dbo.vw_WebTopBids.TopBid, 
          ISNULL(dbo.vw_WebInventory.Mins_Extend_y, 0) AS BidTimeExtend, dbo.Sale.SaleTypeID, dbo.Sale.ClosingDate, dbo.vw_WebInventory.ExDate, 
          dbo.vw_WebInventory.CurrDate, CASE WHEN vw_WebInventory.ExDate > ISNULL(vw_WebInventory.LotClosingDate, Sale.ClosingDate) 
          THEN 1 ELSE 0 END AS ShowBidMessage 
    FROM   dbo.vw_WebInventory INNER JOIN 
          dbo.Sale ON dbo.vw_WebInventory.skref = dbo.Sale.SaleID LEFT OUTER JOIN 
          dbo.vw_WebTopBids ON dbo.vw_WebInventory.skref = dbo.vw_WebTopBids.CatNumber AND dbo.vw_WebInventory.lot_number = dbo.vw_WebTopBids.LotNumber 

nơi vm_webTopBids và vm_WebInventory hai quan điểm khác nhau ... là nó có thể để tối ưu hóa quan điểm này?

Trả lời

18

lồng nhau mà gọi quan điểm khác là một kỹ thuật rất xấu cho hiệu suất. Vì nó không thể được lập chỉ mục, nó phải gọi toàn bộ khung nhìn cơ bản để có được một bản ghi trên cùng sẽ trở lại. Ngoài ra, bạn có đủ lớp và bạn đạt đến giới hạn số lượng bảng mà bạn có thể gọi trong chế độ xem (Và nếu view1 gọi view2 và view3 và cả hai đều gọi cùng một bảng cơ bản, bạn sẽ tham gia vào hai lần thay vì một lần Ngừng gọi số lượt xem từ chế độ xem hoặc bạn sẽ sớm có một hệ thống không thể sử dụng được

Chúng tôi đang thiết kế lại hoàn toàn một hệ thống như vậy vì nhà phát triển ứng dụng đã thực hiện việc này và khách hàng nhiều triệu đô la sẽ rời khỏi chúng tôi trừ khi hiệu suất cải thiện và chúng tôi không thể cải thiện nó với cấu trúc này, vì vậy bây giờ chúng tôi phải đối mặt với thiết kế lại hoàn chỉnh mà khách hàng sẽ không thanh toán vì lỗi của chúng tôi. KHÔNG đi xuống con đường này. rất, rất tệ.

+0

Cảm ơn sự giúp đỡ ... – girish

3

Chế độ xem là macro được mở rộng thành truy vấn bên ngoài. Trừ khi đó là chế độ xem được lập chỉ mục và bạn có ấn bản doanh nghiệp, nó chỉ bị bỏ qua.

Vì vậy, nếu bạn tham gia 3 lượt xem và mỗi chế độ xem sử dụng 5 bảng, bạn có thể tham gia lớn với 15 bảng.

Bạn đặt cược tốt nhất là Database Tuning Advisor hoặc một kịch bản chỉ số mất tích:

SELECT 
    CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact * 
    (migs.user_seeks + migs.user_scans)) AS improvement_measure, 
    'CREATE INDEX missing_index_' + CONVERT(varchar, mig.index_group_handle) + 
    '_' + CONVERT(varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + 
    ISNULL(mid.equality_columns, '') + 
    CASE WHEN mid.equality_columns IS NOT NULL AND 
       mid.inequality_columns IS NOT NULL THEN ',' 
     ELSE '' 
    END + ISNULL(mid.inequality_columns, '') + ')' + ISNULL(' INCLUDE (' + 
                  mid.included_columns + 
                  ')', '') AS create_index_statement, 
    migs.*, 
    mid.database_id, 
    mid.[object_id], 
    mig.index_group_handle, 
    mid.index_handle 
FROM 
    sys.dm_db_missing_index_groups mig INNER JOIN 
    sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle INNER JOIN 
    sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle 
WHERE 
    CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact * 
    (migs.user_seeks + migs.user_scans)) > 10 AND 
    database_id = DB_ID() 
ORDER BY 
    migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + 
                 migs.user_scans) DESC 

Edit, sau khi dụ

Bạn đang làm tổ quan điểm trên quan điểm. Không thể tối ưu hóa chính chế độ xem đó.

Như đã đề cập, điều này không thể được lập chỉ mục

+0

thêm chỉ mục để xem hữu ích tối ưu hóa tốc độ? – girish

+0

@girish: thật khó để nói mà không có thêm thông tin. Cá nhân, tôi muốn sử dụng DTA hoặc kịch bản ở trên trước khi tôi xem xét các khung nhìn được lập chỉ mục – gbn

+0

tôi đã đề cập đến ví dụ ở trên ... – girish

2

Trong trường hợp này, quan điểm không thể được lập chỉ mục bởi vì nó có chứa một OUTER JOIN.

Xem bài viết này cung cấp thông tin về quan điểm lập chỉ mục và (nhiều) hạn chế đối với họ: quan điểm http://technet.microsoft.com/en-us/library/cc917715.aspx

+0

là điều này có nghĩa là, trên quan điểm là perfact vì nó là ... nó không thể được tối ưu hóa nữa – girish

+0

Phụ thuộc vào quá nhiều để nói. Như được đề xuất ở nơi khác, trước tiên hãy xem xét tối ưu hóa các bảng cơ bản. Nếu mô hình truy cập cần sử dụng khung nhìn rộng rãi để cải thiện khung nhìn này sẽ mang lại lợi ích lớn nhất, hãy xem liệu bạn có thể thay đổi nó để nó đáp ứng các ràng buộc xem được lập chỉ mục và sau đó thêm các chỉ mục thích hợp. –

Các vấn đề liên quan