Chỉ số phù hợp với một phần của người khác là gì?


27

Tôi đang cố gắng tìm hiểu thêm về toán tử kế hoạch truy vấn "kiểm tra tham chiếu khóa ngoài" được giới thiệu trong SQL Server 2016. Không có nhiều thông tin về nó ngoài đó. Microsoft đã công bố nó ở đây và tôi viết blog về nó ở đây . Toán tử mới có thể được nhìn thấy bằng cách xóa một hàng khỏi bảng cha với 254 tham chiếu khóa ngoài trở lên: liên kết dbfiddle .

Có ba số lượng khác nhau được hiển thị trong chi tiết toán tử:

Chi tiết kiểm tra FK

  • Số tham chiếu khóa ngoài là số lượng khóa ngoại đến.
  • Không có Chỉ số phù hợp Đếm là số lượng khóa ngoại đến mà không có chỉ mục phù hợp. Xác minh rằng bảng đã cập nhật hoặc bị xóa sẽ không vi phạm ràng buộc đó sẽ yêu cầu quét bảng con.
  • Tôi không biết Số lượng Chỉ số Kết hợp Phần nào thể hiện.

Một chỉ số phù hợp một phần trong bối cảnh này là gì? Tôi đã không thể làm cho bất kỳ điều sau đây để làm việc:

  • Các chỉ mục được lọc
  • Đặt cột khóa ngoại làm INCLUDEcột cho chỉ mục
  • Các chỉ mục với cột khóa ngoại là cột khóa thứ hai
  • Chỉ mục cột đơn cho nhiều khóa ngoại cột
  • Tạo nhiều chỉ mục bao phủ để cho phép kế hoạch "tham gia chỉ mục" cho khóa ngoại nhiều cột

Dan Guzman chỉ ra rằng nhiều khóa ngoại có thể khớp với các chỉ mục ngay cả khi các khóa chỉ mục theo thứ tự khác với các cột khóa ngoại. Mã của anh ta ở đây trong trường hợp ai đó có thể sử dụng nó làm điểm bắt đầu để tìm hiểu thêm về các chỉ mục khớp một phần.

Câu trả lời:


13

Tôi đã nói chuyện với mọi người thông minh hơn tôi rất nhiều và chúng tôi sẽ sớm ghi lại điều này ™.

Định nghĩa thực tế của điều này, trong thời gian tạm thời là:

PartialMatchingIndexCount phản ánh số lượng tài liệu tham khảo có thể được kiểm tra bằng cách tìm kiếm chỉ mục, nhưng khóa chỉ mục không bao gồm tất cả các cột được kiểm tra. Ví dụ: các phần tử ForeignKeyReferenceCheck tương ứng chứa cả phần tử Tìm kiếm và phần tử Vị ngữ.

Ngoài ra:

Nếu con số này lớn hơn 0, có một vấn đề về hiệu suất tiềm năng, trong trường hợp khớp một phần dẫn đến số lượng lớn hàng.


6
Một ví dụ làm việc hoặc tài liệu thực tế sẽ là vinh quang. Bounty được cung cấp
Tom V - Đội Monica

3

Sau khi googling thêm, tôi quản lý để đưa ra một bài viết đề cập đến "Chỉ số phù hợp một phần" và Khóa ngoại

Các ngày 01 Tháng 3 năm 2013 Blog Post trong Blog Code Carlos Klapp của quyềnForeign Keys without Indexes có Stored Procedure gọi Util_FKsWithoutIndexesmà ngoại hình cho các phím nước ngoài mà không có chỉ số thích hợp cho các mối quan hệ FK. (Có vẻ như blogger này đã gỡ bỏ điều này từ SQL Server Central The Ultimate Index-Less Foreign-Key Finder(ngày 15 tháng 10 năm 2009) ) Blog nói như sau:

Tìm kiếm các ràng buộc khóa ngoài không có chỉ mục khớp hoàn toàn.

Các chỉ mục khớp một phần tốt nhất được xuất ra với MatchCounts và so sánh cột

Tạo mẫu CREATE INDEX cho mỗi khóa ngoại không có chỉ mục khớp hoặc chỉ mục khớp một phần.

Tùy chỉnh khi cần (thêm bao gồm, nếu bạn muốn nó được nhóm hoặc nếu nó phải là một phần của khóa chính hoặc nếu bạn muốn hợp nhất với một chỉ mục khác)

Các FK thiếu chỉ mục khớp hoàn toàn có thể làm ảnh hưởng nghiêm trọng đến hiệu suất của DELETES trên bảng được tham chiếu do quét bảng để kiểm tra tính toàn vẹn tham chiếu, cũng như CHỌN trên các bảng tham chiếu nơi các cột khóa ngoài nằm trong các vị từ WHERE hoặc THAM GIA (Điều này sẽ ảnh hưởng đến bạn cho dù một ràng buộc tồn tại hay không). Điều này chỉ kiểm tra các cột N đầu tiên của chỉ mục trong đó N là số lượng cột trong ràng buộc khóa ngoài.

Thứ tự cột chỉ mục không được xác minh ngoài điều này (Một FK hai col có 1 cột khớp trong col thứ 2 của chỉ số 3 col sẽ được xuất ra dưới dạng khớp một phần)

Nếu cơ sở dữ liệu của bạn không có ràng buộc khóa ngoại, thì công cụ này sẽ vô giá trị với bạn.

Nhiều cơ sở dữ liệu có bảo hiểm ràng buộc khóa một phần nước ngoài. Điều này chỉ hoạt động trên các bảng liên quan nơi các ràng buộc được khai báo.

Nếu tôi hiểu điều này một cách chính xác, nếu mối quan hệ FK không có chỉ mục khớp với mọi cột trong một số chỉ mục cần thiết, có thể có một số chỉ mục có một số cột. Ví dụ, nếu một mối quan hệ FK có ba cột ( a, b, c) nhưng không có chỉ mục với ba cột tương tự, có thể tồn tại một chỉ số có ( a, b) hoặc ( a, c) hoặc ( b, c) và có thể giúp đỡ với các truy vấn nhưng sẽ yêu cầu một số chỉ mục quét vào các hàng với cột bị thiếu.

Nếu hoàn toàn không có chỉ mục nào có thể hỗ trợ ràng buộc FK, thì "Đếm chỉ mục khớp một phần" sẽ bằng 0 ( 0hoặc ít nhất sẽ không tăng số lượng này.


Đây có phải là những gì bạn có trong tâm trí? Vẫn không thể làm cho nó hoạt động ... dbfiddle.uk/
Joe Obbish

Không chính xác. Hãy thử tạo một FK với (FKey2,FKey3)và tạo một chỉ mục trên FKey2. Hãy thử nó.
RolandoMySQLDBA

Xin nhớ rằng tôi không phải là một người máy chủ SQL, nhưng tôi chỉ đang cố gắng giúp đỡ.
RolandoMySQLDBA

Tôi hiểu và đánh giá cao bất kỳ ý tưởng để thử. Tôi cũng không thể làm cho hai cột một làm việc.
Joe Obbish

Bạn có thể bỏ qua create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3), giữ chỉ số FKey2và thử lại.
RolandoMySQLDBA
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.