Làm cách nào để truy vấn 20 triệu lượt xem bản ghi này nhanh hơn?


14

Đối với chức năng tìm kiếm, tôi đang sử dụng chế độ xem có các bản ghi từ tất cả các bảng mà tôi cần tìm kiếm. Lượt xem có gần 20 triệu hồ sơ. Tìm kiếm chống lại quan điểm này đang mất quá nhiều thời gian.

Tôi nên tìm ở đâu để cải thiện hiệu suất của quan điểm này?

Định nghĩa sơ bộ cho quan điểm dưới đây. Nó bao gồm mười ba bảng và khoảng ba mươi lĩnh vực.

CREATE VIEW [dbo].[v_AllForSearch]
AS
SELECT 
  FT.firstField AS [firstField]
, FT.fld_primary AS [fld_primary]
, FT.fld_thirdField AS [thirdField]
, FT.fld_fourthField AS [fourthField]           
, ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField]
, ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch
, ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch
, ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch
, ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch]
, ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch]
, ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch]
, ISNULL(FIT.[fld_nineSearch],'') AS [nineSearch]
, ISNULL(SIT.[fld_tenthSearch],'')AS [tenthSearch]
, ISNULL(SET.[fld_eleventhSearch],'') AS [eleventhSearch]
, ISNULL(ET.[twelthSearch],'')AS [twelthSearch]
, ISNULL(NT.[thirteenthSearch],'')AS [thirteenthSearch]
, ISNULL(NT.[fourteenSearch],'') AS [fourteenSearch]
, ISNULL(NT.[fifteenSearch],'') AS [fifteenSearch]
, ISNULL(NT.[sxteenSearch],'')  AS [sxteenSearch]
, ISNULL(NT.[seventeenSearch],'') AS [seventeenSearch]
, ISNULL(NT.[eighteenSearch],'')AS [eighteenSearch]
, ISNULL(TT.[ninteenSearch],'') AS [ninteenSearch]
, ISNULL(ELT.[twentySearch],'') AS [twentySearch]
, ISNULL(ELT.[twentyOneSearch],'') AS [twentyOneSearch]
, ISNULL(TWT.[twentyTwoSearch],'') AS [twentyTwoSearch]
, ISNULL(THT.twentyThree,'') AS [twentyThree]
, ISNULL(THT.twentyFour,'') AS [twentyFour]
, ISNULL(THT.twentyFive,'') AS [twentyFive]
, ISNULL(THT.twentySix,'') AS [twentySix]
FROM 
      tblFirstTable AS FT         
      LEFT JOIN [tblSecondTable] AS ST 
            ON ST.[fld_primary] = FT.[fld_primary]        
      LEFT JOIN [tblThirdTable] AS TT 
            ON TT.[fld_primary] = FT.[fld_primary]        
      LEFT JOIN [tblFourthTable] AS FRT 
            ON FRT.[fld_primary] = FT.[fld_primary]       
      LEFT JOIN [tblFifthTable] AS FIT 
            ON FIT.[fld_primary] = FT.[fld_primary]       
      LEFT JOIN [tblSixthTable] AS SIT 
            ON SIT.[fld_primary] = FT.[fld_primary]       
      LEFT JOIN [tblSeventhTable] AS SET 
            ON SET.[fld_primary] = FT.[fld_primary]       
      LEFT JOIN [tblEighthTable] AS ET 
            ON ET.[fld_primary] = FT.[fld_primary] 
      LEFT JOIN [tblNinthTable] AS NT 
            ON NT.[fld_primary] = FT.[fld_primary]        
      LEFT JOIN [tblELTnthTable] AS TT 
            ON TT.[fld_primary] = FT.[fld_primary]        
      LEFT JOIN [tblEleventhTable] AS ELT 
            ON ELT.[fld_primary] = FT.[fld_primary]       
      LEFT JOIN [tblTwelthTable] AS TWT 
                            ON TWT.[fld_id] = ELT.[fld_id]  
              LEFT JOIN [tblThirteenthTable] AS THT
            ON THT.[firstField]= FT.[firstField]
WHERE fld_Status ..

Câu trả lời:


9

Một khung nhìn là macro mở rộng. Vì vậy, nếu chế độ xem của bạn là THAM GIA 2 bảng, kế hoạch thực hiện sẽ hiển thị 2 bảng. Quan điểm là minh bạch.

Điều này không áp dụng nếu chế độ xem được lập chỉ mục / cụ thể hóa. Tuy nhiên sau đó bạn sẽ không hỏi câu hỏi này.

Vì vậy, kế hoạch thực hiện nói gì? DTA? Thiếu chỉ mục truy vấn dmv? Truy vấn dmv đắt nhất?


Anh ta có thể đang đặt câu hỏi cho một cái nhìn cụ thể hóa, và không nhận ra nó thường được triển khai như một bảng khác, vì vậy có thể được lập chỉ mục, v.v.
Joe

@Joe: có thể, nhưng sau đó OP sẽ không yêu cầu giúp đỡ nếu họ biết sự khác biệt ...
gbn

Câu hỏi được gắn thẻ cho MS SQL Server thay vì "các khung nhìn cụ thể hóa", chúng ta nên nói về "các khung nhìn được lập chỉ mục";)
AndrewQuery

1
@AndrewSQL: Tôi đã làm. Nhưng chúng ta nên phục vụ cho các dạng sống thấp hơn ...
gbn

6

Không có thêm chi tiết về chế độ xem và bảng, câu trả lời là "tùy thuộc", nhưng bạn có thể bắt đầu xem mệnh đề WHERE của chế độ xem của mình cho các trường có thể yêu cầu chỉ mục.


1
Nhưng tôi đã có ấn tượng rằng các quan điểm nói chung không được hưởng lợi nhiều từ các chỉ mục (... theo "Tôi được nói bởi anh chàng này mà tôi biết")
jcolebrand

5
@jcolebrand: các quan điểm nói chung được trợ giúp rất nhiều bởi các chỉ mục, tùy thuộc vào cách chúng được sử dụng. Về cơ bản khi được sử dụng trong một truy vấn nhất định, chúng sẽ có lợi như thể mã của chúng được chèn trực tiếp vào truy vấn. Đối với các chế độ xem + truy vấn đơn giản, điều này có nghĩa là họ sử dụng các chỉ mục cũng như bất kỳ truy vấn đơn giản nào. Đối với các khung nhìn / truy vấn phức tạp hơn, nó phụ thuộc vào mức độ mà trình hoạch định truy vấn có thể sắp xếp lại và tối ưu hóa công việc cần thực hiện. Cách tốt nhất để thấy điều này là chọn một tập dữ liệu lớn và tạo một số chế độ xem và truy vấn mẫu bằng cách sử dụng chúng và xem màn hình kế hoạch truy vấn của SSMS cho biết QP làm gì với chúng.
David Spillett

6

Ngoài những gì người khác đã nói (mệnh đề WHERE, INDEX có thể giúp đỡ) Tôi đề nghị bạn có thể muốn xem xét các chế độ xem được lập chỉ mục - giả sử thậm chí có thể tạo các chỉ mục trên chế độ xem ( chi tiết ). Sau đó, bạn cũng có thể áp dụng gợi ý NOEXPAND trong các truy vấn của mình ( chi tiết ).


Những chi tiết này nghe có vẻ hứa hẹn. Hãy thử tôi và sẽ nhận lại kết quả.
balu

4

Câu trả lời chung chung là hãy xem kế hoạch thực hiện. Là tham gia của bạn được lập chỉ mục? Các trường đầu ra của bạn có được bao gồm trong các chỉ mục không? Bạn chỉ xuất ra các cột bạn cần xem?


0

Những gì tôi có thể làm, chỉ là tạo 2 lượt xem

  • Khung nhìn thứ 1 chỉ là những lĩnh vực tôi cần tìm kiếm; Chỉ là những lĩnh vực. Tôi sẽ trả về trường ID cho mỗi hàng, cộng với loại bảng bạn đang tìm kiếm. Tôi đã làm một điều tương tự bằng cách tạo ra một khung nhìn UNION ALL tìm kiếm nhiều bảng. Tôi chỉ đảm bảo bao gồm id, loại và các trường văn bản, tôi muốn tìm kiếm.

  • Chế độ xem thứ 2 sẽ xử lý hiển thị các kết quả được thu thập trong chế độ xem thứ nhất và sẽ có mọi bảng bạn cần để hiển thị kết quả hoặc có thể thay vì chế độ xem, biến nó thành một thủ tục được lưu trữ.

Tôi sẽ thực hiện một ĐOÀN TẤT CẢ, với một NHÓM THEO ở phía dưới, và tôi sẽ không làm tất cả những người tham gia TRÁI PHIẾU NÀY.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.