Các gói SQL Server: sự khác biệt giữa Quét chỉ mục / Tìm kiếm chỉ mục


87

Trong kế hoạch thực thi SQL Server, sự khác biệt giữa Quét chỉ mục và Tìm kiếm chỉ mục là gì

Tôi đang sử dụng SQL Server 2005.

Câu trả lời:


128

Quét chỉ mục là nơi máy chủ SQL đọc toàn bộ chỉ mục để tìm kiếm các kết quả phù hợp - thời gian diễn ra tỷ lệ thuận với kích thước của chỉ mục.

Tìm kiếm chỉ mục là nơi máy chủ SQL sử dụng cấu trúc b-tree của chỉ mục để tìm kiếm trực tiếp các bản ghi phù hợp (xem http://mattfleming.com/node/192 để biết ý tưởng về cách hoạt động của điều này) - thời gian thực hiện chỉ tương ứng với số lượng bản ghi phù hợp.

  • Nói chung, tìm kiếm chỉ mục thích hợp hơn quét chỉ mục (khi số lượng bản ghi phù hợp thấp hơn nhiều so với tổng số bản ghi), vì thời gian cần thiết để thực hiện tìm kiếm chỉ mục là không đổi bất kể số lượng bản ghi trong bàn.
  • Tuy nhiên, lưu ý rằng trong một số trường hợp nhất định, quá trình quét chỉ mục có thể nhanh hơn tìm kiếm chỉ mục (đôi khi nhanh hơn đáng kể ) - thường là khi bảng rất nhỏ hoặc khi một tỷ lệ phần trăm lớn các bản ghi khớp với vị từ.

3
Liên kết có còn hoạt động không? đối với tôi nó không hoạt động. Xin vui lòng giúp đỡ nếu có một liên kết được cập nhật
Ronak Agrawal

2
@RonakAgrawal Có vẻ như liên kết trên thực tế đã chết - có thể kiểm tra wikipedia để thay thế?
Justin


76

Quy tắc cơ bản cần tuân theo là Lượt tìm là xấu, Lượt tìm là tốt.

Quét chỉ mục

Khi SQL Server thực hiện quét, nó sẽ tải đối tượng mà nó muốn đọc từ đĩa vào bộ nhớ, sau đó đọc qua đối tượng đó từ trên xuống dưới để tìm kiếm các bản ghi mà nó cần.

Tìm kiếm chỉ mục

Khi SQL Server thực hiện tìm kiếm, nó biết vị trí trong chỉ mục mà dữ liệu sẽ đến, vì vậy nó tải lên chỉ mục từ đĩa, đi thẳng đến phần của chỉ mục mà nó cần và đọc đến nơi kết thúc dữ liệu mà nó cần. . Đây rõ ràng là một hoạt động hiệu quả hơn nhiều so với quét, vì SQL đã biết dữ liệu mà nó đang tìm kiếm nằm ở đâu.


Làm cách nào tôi có thể sửa đổi Kế hoạch thực thi để sử dụng Tìm kiếm thay vì Quét?

Khi SQL Server đang tìm kiếm dữ liệu của bạn có lẽ một trong những điều lớn nhất khiến SQL Server chuyển từ tìm kiếm sang quét là khi một số cột bạn đang tìm kiếm không được bao gồm trong chỉ mục bạn muốn nó sử dụng. Thông thường, điều này sẽ khiến Máy chủ SQL quay trở lại thực hiện quét chỉ mục theo cụm, vì chỉ mục được phân cụm chứa tất cả các cột trong bảng. Đây là một trong những lý do lớn nhất (ít nhất là theo ý kiến ​​của tôi) mà giờ đây chúng ta có khả năng BAO GỒM các cột trong một chỉ mục mà không cần thêm các cột đó vào các cột được lập chỉ mục của chỉ mục. Bằng cách bao gồm các cột bổ sung trong chỉ mục, chúng tôi tăng kích thước của chỉ mục, nhưng chúng tôi cho phép SQL Server đọc chỉ mục, mà không cần phải quay lại chỉ mục được phân nhóm hoặc tự nó đến bảng để nhận các giá trị này.

Người giới thiệu

Để biết thông tin về chi tiết cụ thể của từng toán tử này trong kế hoạch Thực thi SQL Server, hãy xem ....


7

Câu trả lời ngắn:

  • Quét chỉ mục: Chạm vào tất cả các hàng trừ các cột nhất định.

  • Tìm kiếm chỉ mục: Chạm vào các hàng nhất định và các cột nhất định.


4

Với Quét chỉ mục, tất cả các hàng trong chỉ mục đang được quét để tìm một hàng phù hợp. Điều này có thể hiệu quả đối với các bảng nhỏ. Với Tìm kiếm chỉ mục, nó chỉ cần chạm vào các hàng thực sự đáp ứng tiêu chí và do đó thường hoạt động hiệu quả hơn


2

Quét chỉ mục xảy ra khi định nghĩa chỉ mục không thể tìm thấy trên một hàng để đáp ứng các vị từ tìm kiếm. Trong trường hợp này, SQL Server phải quét nhiều trang để tìm một dải hàng thỏa mãn các vị từ tìm kiếm.

Trong trường hợp Tìm kiếm chỉ mục, SQL Server tìm một hàng duy nhất phù hợp với các vị từ tìm kiếm bằng cách sử dụng định nghĩa chỉ mục .

Tìm kiếm chỉ mục tốt hơn và hiệu quả hơn.


0

Quét chạm vào mọi hàng trong bảng ngay cả khi bạn đang theo dõi nó hay không

Tìm kiếm chỉ xem xét các hàng mà bạn đang tìm kiếm.

Tìm kiếm luôn tốt hơn so với quét vì chúng hiệu quả hơn trong cách tra cứu dữ liệu.

Một lời giải thích tốt có thể được tìm thấy ở đây


3
Tìm kiếm không phải lúc nào cũng tốt hơn, ví dụ: nếu bảng tương đối nhỏ và một tỷ lệ phần trăm lớn các hàng trong bảng đó cần được trả lại thì quá trình quét chỉ mục có thể hiệu quả hơn nhiều.
Justin

1
Xin chào Justin, tôi đoán bạn muốn nói rằng quét bảng một vài lần có thể tốt hơn. Indexes Seek luôn tốt hơn Index Scan trừ khi chúng ta đang nói về cụm từ. Tuy nhiên, đôi khi, quét bảng hoặc Quét chỉ mục theo cụm có thể hiệu quả hơn vì lý do bạn đã đề cập. Thay vì tìm kiếm chỉ mục và lấy các trường không có trong chỉ mục từ bảng, đôi khi, ms sql sẽ sử dụng bảng ngay cả khi chỉ mục có trường tiêu chí.
Jose Areas
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.