TẠO CHỈ SỐ (Transact-SQL)

Bạn đang xem: tạo máy chủ sql chỉ mục

TẠO CHỈ SỐ (Giao dịch-SQL)

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Tạo chỉ mục quan hệ trên bảng hoặc chế độ xem. Còn được gọi là chỉ mục lưu trữ hàng bởi vì nó là một chỉ mục cây B được phân nhóm hoặc không phân cụm. Bạn có thể tạo chỉ mục lưu trữ hàng trước khi có dữ liệu trong bảng. Sử dụng chỉ mục lưu trữ hàng để cải thiện hiệu suất truy vấn, đặc biệt khi các truy vấn chọn từ các cột cụ thể hoặc yêu cầu các giá trị được sắp xếp theo một thứ tự cụ thể.

Lưu ý

Tài liệu SQL Server thường sử dụng thuật ngữ B-tree để tham chiếu đến các chỉ mục. Trong chỉ mục lưu trữ hàng, SQL Server triển khai cây B +. Điều này không áp dụng cho các chỉ mục cột hoặc kho lưu trữ dữ liệu trong bộ nhớ. Xem lại Hướng dẫn thiết kế và kiến ​​trúc chỉ mục SQL Server để biết chi tiết.

Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW) hiện không hỗ trợ các ràng buộc duy nhất. Mọi ví dụ tham chiếu đến các ràng buộc duy nhất chỉ có thể áp dụng cho Máy chủ SQL và Cơ sở dữ liệu SQL.

Để biết thông tin về nguyên tắc thiết kế chỉ mục, hãy tham khảo Hướng dẫn thiết kế chỉ mục của SQL Server .

Ví dụ:

  1. Tạo chỉ mục không phân nhánh trên bảng hoặc chế độ xem

      TẠO INDEX index1 TRÊN schema1.table1 (column1);
     
  2. Tạo chỉ mục theo nhóm trên bảng và sử dụng tên gồm 3 phần cho bảng

      TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH1 TRÊN database1.schema1.table1 (column1);
     
  3. Tạo một chỉ mục không phân biệt với một ràng buộc duy nhất và chỉ định thứ tự sắp xếp

      TẠO CHỈ SỐ DUY NHẤT 1 TRÊN schema1.table1 (column1 DESC, column2 ASC, column3 DESC);
     

Tình huống chính:

Bắt đầu với SQL Server 2016 (13.x) và Cơ sở dữ liệu SQL, bạn có thể sử dụng chỉ mục không phân biệt trên chỉ mục cột lưu trữ để cải thiện hiệu suất truy vấn kho dữ liệu. Để biết thêm thông tin, hãy xem Columnstore Indexes – Data Warehouse .

Để biết thêm các loại chỉ mục, hãy xem:

Quy ước về cú pháp Transact-SQL

Cú pháp

Cú pháp cho SQL Server và Cơ sở dữ liệu Azure SQL

 TẠO [DUY NHẤT] [ĐÃ ĐÓNG CỬA | NONCLUSTERED] INDEX index_name
    BẬT & lt; đối tượng & gt; (cột [ASC | DESC] [, ... n])
    [BAO GỒM (column_name [, ... n])]
    [WHERE & lt; filter_predicate & gt; ]
    [VỚI (& lt; relational_index_option & gt; [, ... n])]
    [BẬT {partition_scheme_name (column_name)
         | filegroup_name
         | mặc định
         }
    ]
    [FILESTREAM_ON {filestream_filegroup_name | partition_scheme_name | "VÔ GIÁ TRỊ" } ]

[; ]

& lt; đối tượng & gt; :: =
{database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name}

& lt; relational_index_option & gt; :: =
{
    PAD_INDEX = {BẬT | TẮT }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = {BẬT | TẮT }
  | IGNORE_DUP_KEY = {BẬT | TẮT }
  | STATISTICS_NORECOMPUTE = {BẬT | TẮT }
  | STATISTICS_INCREMENTAL = {BẬT | TẮT }
  | DROP_EXISTING = {BẬT | TẮT }
  | ONLINE = {ON [(& lt; low_priasty_lock_wait & gt;)] | TẮT }
  | RESUMABLE = {BẬT | TẮT }
  | MAX_DURATION = & lt; thời gian & gt; [PHÚT]
  | ALLOW_ROW_LOCKS = {BẬT | TẮT }
  | ALLOW_PAGE_LOCKS = {BẬT | TẮT }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = {BẬT | TẮT }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {KHÔNG CÓ | ROW | TRANG }
     [TRÊN CÁC PHẦN ({& lt; partition_number_expression & gt; | & lt; range & gt;}
     [ , ...N ] ) ]
  | XML_COMPRESSION = {BẬT | TẮT }
     [TRÊN CÁC PHẦN ({& lt; partition_number_expression & gt; | & lt; range & gt;}
     [ , ...N ] ) ]
}

& lt; filter_predicate & gt; :: =
    & lt; liên từ & gt; [ Và N ]

& lt; liên từ & gt; :: =
    & lt; không còn tồn tại & gt; | & lt; so sánh & gt;

& lt; không còn tồn tại & gt; :: =
        column_name IN (hằng số, ... n)

& lt; so sánh & gt; :: =
        column_name & lt; so_op & gt; không thay đổi

& lt; so_op & gt; :: =
    {LÀ | KHÔNG | = | & lt; & gt; | ! = | & gt; | & gt; = | ! & gt; | & lt; | & lt; = | ! & lt; }

& lt; low_priasty_lock_wait & gt; :: =
{
    WAIT_AT_LOW_PRIORITY (MAX_DURATION = & lt; thời gian & gt; [MINUTES],
                          ABORT_AFTER_WAIT = {KHÔNG CÓ | TỰ TIN | BLOCKERS})
}

& lt; phạm vi & gt; :: =
& lt; phân_lục_số_lượng & gt; ĐẾN & lt; phân vùng_số_thể_thể & gt;

 

Chỉ mục quan hệ tương thích ngược

Quan trọng

Cấu trúc cú pháp chỉ mục quan hệ tương thích ngược sẽ bị xóa trong phiên bản SQL Server trong tương lai.
Tránh sử dụng cấu trúc cú pháp này trong công việc phát triển mới và lên kế hoạch sửa đổi các ứng dụng hiện đang sử dụng tính năng này.
Sử dụng cấu trúc cú pháp được chỉ định trong & lt; relational_index_option & gt; thay vào đó.

  TẠO [DUY NHẤT] [ĐÃ ĐÓNG CỬA | NONCLUSTERED] INDEX index_name
    BẬT & lt; đối tượng & gt; (column_name [ASC | DESC] [, ... n])
    [VỚI & lt; ngược_cấp_chỉ_hàng & gt; [ ,...N ] ]
    [BẬT {filegroup_name | "mặc định" } ]

& lt; đối tượng & gt; :: =
{
    [ tên cơ sở dữ liệu. [ Tên chủ sở hữu ] . | Tên chủ sở hữu. ]
    table_or_view_name
}

& lt; quay lui :: =
{
    PAD_INDEX
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB
  | IGNORE_DUP_KEY
  | STATISTICS_NORECOMPUTE
  | DROP_EXISTING
}
 

Cú pháp cho Azure Synapse Analytics và Kho dữ liệu song song

 
TẠO INDEX index_name
    BẬT [database_name. [ lược đồ ] . | lược đồ . ] tên_bảng
    [ĐẶT HÀNG (cột [, ... n])]
    [VỚI (DROP_EXISTING = {BẬT | TẮT})]
[;]


TẠO [ĐÃ ĐIỀU CHỈNH | NONCLUSTERED] INDEX index_name
    BẬT [database_name. [ lược đồ ] . | lược đồ . ] tên_bảng
        ({cột [ASC | DESC]} [, ... n])
    VỚI (DROP_EXISTING = {BẬT | TẮT})
[;]

 

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

DUY NHẤT

Tạo một chỉ mục duy nhất trên một bảng hoặc chế độ xem. Chỉ mục duy nhất là chỉ mục trong đó không có hai hàng nào được phép có cùng giá trị khóa chỉ mục. Chỉ mục nhóm trên một chế độ xem phải là duy nhất.

Công cụ cơ sở dữ liệu không cho phép tạo chỉ mục duy nhất trên các cột đã bao gồm các giá trị trùng lặp, cho dù IGNORE_DUP_KEY có được đặt thành BẬT hay không. Nếu điều này được thử, Công cụ Cơ sở dữ liệu sẽ hiển thị một thông báo lỗi. Các giá trị trùng lặp phải được loại bỏ trước khi có thể tạo chỉ mục duy nhất trên cột hoặc các cột. Các cột được sử dụng trong một chỉ mục duy nhất phải được đặt thành KHÔNG ĐỦ, vì nhiều giá trị rỗng được coi là trùng lặp khi một chỉ mục duy nhất được tạo.

ĐÃ ĐIỀU CHỈNH

Tạo chỉ mục trong đó thứ tự logic của các giá trị khóa xác định thứ tự vật lý của các hàng tương ứng trong bảng. Mức dưới cùng hoặc lá của chỉ mục nhóm chứa các hàng dữ liệu thực tế của bảng. Một bảng hoặc chế độ xem được cho phép một chỉ mục nhóm tại một thời điểm.

Một chế độ xem có chỉ mục được phân nhóm duy nhất được gọi là chế độ xem được lập chỉ mục. Tạo một chỉ mục nhóm duy nhất trên một chế độ xem hiện thực hóa chế độ xem. Một chỉ mục nhóm duy nhất phải được tạo trên một khung nhìn trước khi bất kỳ chỉ mục nào khác có thể được xác định trên cùng một khung nhìn. Để biết thêm thông tin, hãy xem Tạo chế độ xem được lập chỉ mục .

Tạo chỉ mục nhóm trước khi tạo bất kỳ chỉ mục không phân nhóm nào. Các chỉ mục không phân nhóm hiện có trên bảng được tạo lại khi tạo chỉ mục được phân nhóm.

Nếu CLUSTERED không được chỉ định, một chỉ mục không phân biệt sẽ được tạo.

Lưu ý

Vì cấp độ lá của chỉ mục được phân nhóm và các trang dữ liệu giống nhau theo định nghĩa, việc tạo chỉ mục được phân nhóm và sử dụng mệnh đề ON partition_scheme_name hoặc ON filegroup_name sẽ di chuyển hiệu quả một bảng từ nhóm tệp mà trên đó bảng được tạo thành lược đồ phân vùng hoặc nhóm tệp mới. Trước khi tạo bảng hoặc chỉ mục trên các nhóm tệp cụ thể, hãy xác minh nhóm tệp nào khả dụng và chúng có đủ không gian trống cho chỉ mục.

Trong một số trường hợp, việc tạo chỉ mục theo nhóm có thể kích hoạt các chỉ mục đã bị vô hiệu hóa trước đó. Để biết thêm thông tin, hãy xem Bật chỉ mục và ràng buộc Tắt chỉ mục và ràng buộc .

KHÔNG ĐƯỢC ĐIỀU CHỈNH

Tạo một chỉ mục chỉ định thứ tự hợp lý của một bảng. Với chỉ mục không phân biệt, thứ tự vật lý của các hàng dữ liệu độc lập với thứ tự được lập chỉ mục của chúng.

Mỗi bảng có thể có tối đa 999 chỉ mục không phân biệt, bất kể chỉ mục được tạo như thế nào: hoặc ngầm định với các ràng buộc CHÍNH và DUY NHẤT hoặc rõ ràng với CREATE INDEX .

Đối với các chế độ xem được lập chỉ mục, chỉ có thể tạo chỉ mục không phân nhóm trên chế độ xem đã xác định chỉ mục được phân nhóm duy nhất.

Nếu không được chỉ định khác, loại chỉ mục mặc định sẽ không được phân loại.

index_name

Tên của chỉ mục. Tên chỉ mục phải là duy nhất trong bảng hoặc dạng xem, nhưng không phải là duy nhất trong cơ sở dữ liệu. Tên chỉ mục phải tuân theo quy tắc của giá trị nhận dạng .

cột

Cột hoặc các cột dựa trên chỉ mục. Chỉ định hai hoặc nhiều tên cột để tạo chỉ mục tổng hợp trên các giá trị kết hợp trong các cột được chỉ định. Liệt kê các cột được đưa vào chỉ mục tổng hợp, theo thứ tự ưu tiên sắp xếp, bên trong dấu ngoặc đơn sau table_or_view_name.

Có thể kết hợp tối đa 32 cột thành một khóa chỉ mục tổng hợp. Tất cả các cột trong khóa chỉ mục tổng hợp phải nằm trong cùng một bảng hoặc dạng xem. Kích thước tối đa cho phép của các giá trị chỉ mục kết hợp là 900 byte đối với chỉ mục được phân nhóm hoặc 1.700 đối với chỉ mục không được phân loại. Giới hạn là 16 cột và 900 byte cho các phiên bản trước Cơ sở dữ liệu SQL và SQL Server 2016 (13.x).

Các cột thuộc loại dữ liệu đối tượng lớn (LOB) ntext , text , varchar (max) , nvarchar ( max) , varbinary (max) , xml hoặc image không thể được chỉ định làm cột chính cho một chỉ mục. Ngoài ra, định nghĩa chế độ xem không được bao gồm các cột ntext , văn bản hoặc hình ảnh , ngay cả khi chúng không được tham chiếu trong CREATE Câu lệnh INDEX .

Bạn có thể tạo chỉ mục trên cột kiểu do người dùng xác định CLR nếu kiểu hỗ trợ thứ tự nhị phân. Bạn cũng có thể tạo chỉ mục trên các cột được tính toán được định nghĩa là lệnh gọi phương thức ngoài cột kiểu do người dùng xác định, miễn là các phương thức được đánh dấu là xác định và không thực hiện các thao tác truy cập dữ liệu. Để biết thêm thông tin về cách lập chỉ mục các cột loại CLR do người dùng xác định, hãy xem CLR Loại do người dùng xác định .

[ASC | DESC]

Xác định hướng sắp xếp tăng dần hoặc giảm dần cho cột chỉ mục cụ thể. Giá trị mặc định là ASC .

BAO GỒM (column [, … n])

Chỉ định các cột không quan trọng sẽ được thêm vào cấp độ lá của chỉ mục không phân biệt. Chỉ mục không hợp nhất có thể là duy nhất hoặc không duy nhất.

Tên cột không được lặp lại trong danh sách INCLUDE và không được sử dụng đồng thời làm cả cột khóa và cột không khóa. Chỉ mục không phân cụm luôn chứa các cột chỉ mục được phân nhóm nếu một chỉ mục được phân nhóm được xác định trên bảng. Để biết thêm thông tin, hãy xem Tạo chỉ mục với các cột đi kèm .

Tất cả các loại dữ liệu đều được phép ngoại trừ văn bản , ntext hình ảnh . Bắt đầu với SQL Server 2012 (11.x) và Cơ sở dữ liệu Azure SQL, nếu bất kỳ một trong các cột không phải khóa được chỉ định là varchar (max) , nvarchar (max) , hoặc kiểu dữ liệu varbinary (max) , chỉ mục có thể được tạo hoặc tạo lại bằng cách sử dụng tùy chọn ONLINE.

Có thể bao gồm các cột được tính toán có tính xác định và chính xác hoặc không chính xác. Các cột được tính toán bắt nguồn từ image , ntext, text , varchar (max) , nvarchar (max) , varbinary (max) , và kiểu dữ liệu xml có thể được bao gồm trong các cột không phải khóa, miễn là loại dữ liệu cột được tính toán được cho phép dưới dạng cột được bao gồm. Để biết thêm thông tin, hãy xem Chỉ mục trên các cột được tính toán .

Để biết thông tin về cách tạo chỉ mục XML, hãy xem TẠO CHỈ SỐ XML .

WHERE & lt; filter_predicate & gt;

Tạo chỉ mục được lọc bằng cách chỉ định những hàng nào sẽ đưa vào chỉ mục. Chỉ mục được lọc phải là chỉ mục không phân biệt trên bảng. Tạo thống kê đã lọc cho các hàng dữ liệu trong chỉ mục đã lọc.

Vị từ bộ lọc sử dụng logic so sánh đơn giản và không thể tham chiếu cột được tính toán, cột UDT, cột kiểu dữ liệu không gian hoặc cột kiểu dữ liệu hierarchyID. Các phép so sánh sử dụng ký tự NULL không được phép với các toán tử so sánh. Thay vào đó, hãy sử dụng các toán tử IS NULL IS NOT NULL .

Dưới đây là một số ví dụ về các vị từ bộ lọc cho bảng Production.BillOfMaterials :

  NGÀY Bắt đầu Ở ĐÂU & gt; '20000101' VÀ Ngày kết thúc & lt; = '20000630'

WHERE ComponentID IN (533, 324, 753)

NGÀY Bắt đầu TẠI ĐÂU ('20000404', '20000905') VÀ Ngày kết thúc KHÔNG ĐẦY ĐỦ
 

Các chỉ mục đã lọc không áp dụng cho các chỉ mục XML và chỉ mục toàn văn. Đối với chỉ mục DUY NHẤT, chỉ các hàng đã chọn phải có giá trị chỉ mục duy nhất. Các chỉ mục đã lọc không cho phép tùy chọn IGNORE_DUP_KEY .

ON partition_scheme_name (column_name)

Chỉ định lược đồ phân vùng xác định nhóm tệp mà các phân vùng của chỉ mục được phân vùng sẽ được ánh xạ. Lược đồ phân vùng phải tồn tại trong cơ sở dữ liệu bằng cách thực thi TẠO LẬP KẾ HOẠCH ĐỐI TÁC hoặc TẠO BIỂU ĐỒ ĐỐI TÁC . column_name chỉ định cột mà chỉ mục được phân vùng sẽ được phân vùng. Cột này phải khớp với kiểu dữ liệu, độ dài và độ chính xác của đối số của hàm phân vùng mà partition_scheme_name đang sử dụng. column_name không bị giới hạn đối với các cột trong định nghĩa chỉ mục. Bất kỳ cột nào trong bảng cơ sở đều có thể được chỉ định, ngoại trừ khi phân vùng một chỉ mục DUY NHẤT, thì column_name phải được chọn trong số các cột được sử dụng làm khóa duy nhất. Hạn chế này cho phép Công cụ cơ sở dữ liệu xác minh tính duy nhất của các giá trị khóa chỉ trong một phân vùng duy nhất.

Lưu ý

Khi bạn phân vùng một chỉ mục nhóm, không phải duy nhất, theo mặc định, Công cụ Cơ sở dữ liệu sẽ thêm cột phân vùng vào danh sách các khoá chỉ mục được nhóm, nếu nó chưa được chỉ định. Khi phân vùng một chỉ mục không phải là duy nhất, không phân biệt, Công cụ cơ sở dữ liệu sẽ thêm cột phân vùng làm cột không phải khóa (được bao gồm) của chỉ mục, nếu nó chưa được chỉ định.

Nếu partition_scheme_name hoặc filegroup không được chỉ định và bảng được phân vùng, chỉ mục sẽ được đặt trong cùng một lược đồ phân vùng, sử dụng cùng một cột phân vùng, như bảng bên dưới.

Lưu ý

Bạn không thể chỉ định một lược đồ phân vùng trên một chỉ mục XML. Nếu bảng cơ sở được phân vùng, chỉ mục XML sử dụng lược đồ phân vùng giống như bảng.

Để biết thêm thông tin về chỉ mục phân vùng, Bảng và chỉ mục được phân vùng .

BẬT filegroup_name

Tạo chỉ mục được chỉ định trên nhóm tệp được chỉ định. Nếu không có vị trí nào được chỉ định và bảng hoặc dạng xem không được phân vùng, thì chỉ mục sử dụng cùng một nhóm tệp như bảng hoặc dạng xem bên dưới. Nhóm tệp phải đã tồn tại.

BẬT “default”

Tạo chỉ mục được chỉ định trên cùng một nhóm tệp hoặc lược đồ phân vùng như bảng hoặc chế độ xem.

Thuật ngữ mặc định, trong ngữ cảnh này, không phải là một từ khóa. Nó là mã định danh cho nhóm tệp mặc định và phải được phân tách, như trong ON "default" hoặc ON [default] . Nếu “mặc định” được chỉ định, tùy chọn QUOTED_IDENTIFIER phải được BẬT cho phiên hiện tại. Đây là thiết lập mặc định. Để biết thêm thông tin, hãy xem SET QUOTED_IDENTIFIER .

Lưu ý

“default” không chỉ ra nhóm tệp mặc định của cơ sở dữ liệu trong ngữ cảnh của CREATE INDEX . Điều này khác với CREATE TABLE , trong đó “default” định vị bảng trên nhóm tệp mặc định của cơ sở dữ liệu.

[FILESTREAM_ON {filestream_filegroup_name | partition_scheme_name | “NULL”}]

Chỉ định vị trí của dữ liệu FILESTREAM cho bảng khi chỉ mục nhóm được tạo. Mệnh đề FILESTREAM_ON cho phép chuyển dữ liệu FILESTREAM sang một nhóm tệp hoặc lược đồ phân vùng FILESTREAM khác.

filestream_filegroup_name là tên của nhóm tệp FILESTREAM. Nhóm tệp phải có một tệp được xác định cho nhóm tệp bằng cách sử dụng TẠO CƠ SỞ DỮ LIỆU hoặc TẠO CƠ SỞ DỮ LIỆU tuyên bố; nếu không, một lỗi sẽ xuất hiện.

Nếu bảng được phân vùng, mệnh đề FILESTREAM_ON phải được bao gồm và phải chỉ định lược đồ phân vùng của nhóm tệp FILESTREAM sử dụng cùng một chức năng phân vùng và các cột phân vùng như lược đồ phân vùng cho bảng. Nếu không, sẽ xảy ra lỗi.

Nếu bảng không được phân vùng, thì cột FILESTREAM không thể được phân vùng. Dữ liệu FILESTREAM cho bảng phải được lưu trữ trong một nhóm tệp duy nhất được chỉ định trong mệnh đề FILESTREAM_ON .

FILESTREAM_ON NULL có thể được chỉ định trong câu lệnh CREATE INDEX nếu một chỉ mục nhóm đang được tạo và bảng không chứa cột FILESTREAM.

Để biết thêm thông tin, hãy xem FILESTREAM (SQL Server) .

& lt; object & gt; :: =

Đối tượng đủ điều kiện hoặc không đủ điều kiện được lập chỉ mục.

database_name

Tên của cơ sở dữ liệu.

schema_name

Tên của lược đồ chứa bảng hoặc chế độ xem.

table_or_view_name

Tên của bảng hoặc chế độ xem được lập chỉ mục.

Chế độ xem phải được xác định bằng SCHEMABINDING để tạo chỉ mục trên đó. Chỉ mục nhóm duy nhất phải được tạo trên một dạng xem trước khi tạo bất kỳ chỉ mục không phân nhóm nào. Để biết thêm thông tin về các chế độ xem được lập chỉ mục, hãy xem phần Nhận xét.

Bắt đầu với SQL Server 2016 (13.x), đối tượng có thể là một bảng được lưu trữ với chỉ mục chuỗi cột được phân cụm.

Cơ sở dữ liệu Azure SQL hỗ trợ định dạng tên ba phần database_name. [schema_name] .object_name khi database_name là cơ sở dữ liệu hiện tại hoặc database_name là tempdb và object_name bắt đầu bằng #.

& lt; relational_index_option & gt; :: =

Chỉ định các tùy chọn để sử dụng khi bạn tạo chỉ mục.

PAD_INDEX = {ON | TẮT}

Chỉ định đệm chỉ mục. Giá trị mặc định là TẮT .

BẬT
Phần trăm không gian trống được chỉ định bởi fillfactor được áp dụng cho các trang cấp trung gian của chỉ mục.

TẮT hoặc hệ số lấp đầy không được chỉ định
Các trang cấp trung gian được lấp đầy gần hết dung lượng, để lại đủ không gian cho ít nhất một hàng có kích thước tối đa mà chỉ mục có thể có, xem xét tập hợp các khóa trên các trang trung gian.

Tùy chọn PAD_INDEX chỉ hữu ích khi FILLFACTOR được chỉ định, vì PAD_INDEX sử dụng tỷ lệ phần trăm do FILLFACTOR chỉ định. Nếu phần trăm được chỉ định cho FILLFACTOR không đủ lớn để cho phép một hàng, thì Công cụ cơ sở dữ liệu sẽ ghi đè nội bộ phần trăm để cho phép ở mức tối thiểu. Số hàng trên trang chỉ mục trung gian không bao giờ ít hơn hai, bất kể giá trị của hệ số lấp đầy thấp như thế nào.

Theo cú pháp tương thích ngược, WITH PAD_INDEX tương đương với WITH PAD_INDEX = ON .

FILLFACTOR = fillfactor

Chỉ định một tỷ lệ phần trăm cho biết Công cụ Cơ sở dữ liệu sẽ tạo ra mức độ đầy đủ của mỗi trang chỉ mục trong quá trình tạo hoặc xây dựng lại chỉ mục. Giá trị cho hệ số lấp đầy phải là một giá trị nguyên từ 1 đến 100. Giá trị hệ số lấp đầy 0 và 100 giống nhau về mọi mặt. Nếu fillfactor là 100, Database Engine sẽ tạo các chỉ mục với các trang lá được lấp đầy bằng dung lượng.

Cài đặt FILLFACTOR chỉ áp dụng khi chỉ mục được tạo hoặc xây dựng lại. Công cụ Cơ sở dữ liệu không tự động giữ tỷ lệ phần trăm không gian trống được chỉ định trong các trang.

Xem Thêm  Khối nội tuyến CSS - hiển thị khối nội tuyến css

Để xem cài đặt hệ số lấp đầy, hãy sử dụng fill_factor trong sys.indexes .

Quan trọng

Tạo chỉ mục theo nhóm với FILLFACTOR nhỏ hơn 100 sẽ ảnh hưởng đến dung lượng lưu trữ mà dữ liệu chiếm vì Công cụ cơ sở dữ liệu phân phối lại dữ liệu khi tạo chỉ mục theo nhóm.

Để biết thêm thông tin, hãy xem Chỉ định Hệ số lấp đầy cho Chỉ mục .

SORT_IN_TEMPDB = {ON | TẮT}

Chỉ định có lưu trữ các kết quả sắp xếp tạm thời trong tempdb hay không. Giá trị mặc định là TẮT ngoại trừ Azure SQL Database Hyperscale. Đối với tất cả các hoạt động xây dựng chỉ mục trong Hyperscale, SORT_IN_TEMPDB luôn BẬT, bất kể tùy chọn được chỉ định trừ khi sử dụng xây dựng lại chỉ mục có thể tiếp tục.

BẬT
Kết quả sắp xếp trung gian được sử dụng để tạo chỉ mục được lưu trữ trong tempdb . Điều này có thể giảm thời gian cần thiết để tạo chỉ mục nếu tempdb nằm trên tập hợp đĩa khác với cơ sở dữ liệu người dùng. Tuy nhiên, điều này làm tăng dung lượng ổ đĩa được sử dụng trong quá trình tạo chỉ mục.

TẮT
Kết quả sắp xếp trung gian được lưu trữ trong cơ sở dữ liệu giống như chỉ mục.

Ngoài không gian cần thiết trong cơ sở dữ liệu người dùng để tạo chỉ mục, tempdb phải có cùng một lượng không gian bổ sung để chứa các kết quả sắp xếp trung gian. Để biết thêm thông tin, hãy xem SORT_IN_TEMPDB Tùy chọn dành cho chỉ mục .

Theo cú pháp tương thích ngược, WITH SORT_IN_TEMPDB tương đương với WITH SORT_IN_TEMPDB = ON .

IGNORE_DUP_KEY = {ON | TẮT}

Chỉ định phản hồi lỗi khi thao tác chèn cố gắng chèn các giá trị khóa trùng lặp vào một chỉ mục duy nhất. Tùy chọn IGNORE_DUP_KEY chỉ áp dụng cho các hoạt động chèn sau khi chỉ mục được tạo hoặc xây dựng lại. Tùy chọn không có hiệu lực khi thực thi CREATE INDEX , ALTER INDEX hoặc UPDATE . Giá trị mặc định là TẮT .

BẬT
Thông báo cảnh báo sẽ xảy ra khi các giá trị khóa trùng lặp được chèn vào một chỉ mục duy nhất. Chỉ những hàng vi phạm giới hạn tính duy nhất mới bị lỗi.

TẮT
Thông báo lỗi sẽ xảy ra khi các giá trị khóa trùng lặp được chèn vào một chỉ mục duy nhất. Toàn bộ thao tác INSERT sẽ được khôi phục.

IGNORE_DUP_KEY không thể được đặt thành BẬT cho các chỉ mục được tạo trên một chế độ xem, chỉ mục không phải duy nhất, chỉ mục XML, chỉ mục không gian và chỉ mục đã lọc.

Để xem IGNORE_DUP_KEY , hãy sử dụng sys.indexes .

Theo cú pháp tương thích ngược, WITH IGNORE_DUP_KEY tương đương với WITH IGNORE_DUP_KEY = ON .

STATISTICS_NORECOMPUTE = {ON | TẮT}

Chỉ định xem thống kê phân phối có được tính toán lại hay không. Giá trị mặc định là TẮT .

BẬT
Số liệu thống kê lỗi thời không được tính toán lại tự động.

TẮT
Cập nhật thống kê tự động được bật.

Để khôi phục cập nhật thống kê tự động, hãy đặt STATISTICS_NORECOMPUTE thành TẮT hoặc thực thi UPDATE STATISTICS mà không có mệnh đề NORECOMPUTE .

Quan trọng

Việc tắt tự động tính toán lại thống kê phân phối có thể ngăn trình tối ưu hóa truy vấn chọn kế hoạch thực thi tối ưu cho các truy vấn liên quan đến bảng.

Theo cú pháp tương thích ngược, WITH STATISTICS_NORECOMPUTE tương đương với WITH STATISTICS_NORECOMPUTE = ON .

STATISTICS_INCREMENTAL = {ON | TẮT}

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x)) và Cơ sở dữ liệu Azure SQL

Khi BẬT , thống kê được tạo là thống kê trên mỗi phân vùng. Khi TẮT , cây thống kê bị loại bỏ và SQL Server sẽ tính toán lại thống kê. Giá trị mặc định là TẮT .

Nếu thống kê trên mỗi phân vùng không được hỗ trợ, tùy chọn này sẽ bị bỏ qua và một cảnh báo sẽ được tạo. Số liệu thống kê tăng dần không được hỗ trợ cho các loại thống kê sau:

  • Thống kê được tạo bằng các chỉ mục không được căn chỉnh theo phân vùng với bảng cơ sở.
  • Thống kê được tạo trên cơ sở dữ liệu thứ cấp luôn bật có thể đọc được.
  • Thống kê được tạo trên cơ sở dữ liệu chỉ đọc.
  • Thống kê được tạo trên các chỉ mục đã lọc.
  • Số liệu thống kê được tạo về lượt xem.
  • Số liệu thống kê được tạo trên các bảng nội bộ.
  • Thống kê được tạo bằng chỉ mục không gian hoặc chỉ mục XML.

DROP_EXISTING = {ON | TẮT}

Là một tùy chọn để loại bỏ và xây dựng lại chỉ mục được phân nhóm hoặc không phân nhóm hiện có với các thông số kỹ thuật cột được sửa đổi và giữ nguyên tên cho chỉ mục. Giá trị mặc định là TẮT .

BẬT
Chỉ định cho DROP REBUILD chỉ mục hiện có, chỉ mục này phải có cùng tên với tham số index_name.

TẮT
Chỉ định không DROP REBUILD chỉ mục hiện có. SQL Server hiển thị lỗi nếu tên chỉ mục được chỉ định đã tồn tại.

Với DROP_EXISTING , bạn có thể thay đổi:

  • Chỉ mục lưu trữ hàng không được phân bổ cho một chỉ mục lưu trữ hàng được phân nhóm.

Với DROP_EXISTING , bạn không thể thay đổi:

  • Một chỉ mục lưu trữ hàng được phân nhóm thành một chỉ mục lưu trữ hàng không phân biệt.
  • Một chỉ mục cột lưu trữ được phân cụm cho bất kỳ loại chỉ mục lưu trữ hàng nào.

Theo cú pháp tương thích ngược, WITH DROP_EXISTING tương đương với WITH DROP_EXISTING = ON .

ONLINE = {ON | TẮT}

Chỉ định liệu các bảng cơ bản và chỉ mục được liên kết có khả dụng cho các truy vấn và sửa đổi dữ liệu trong quá trình hoạt động chỉ mục hay không. Giá trị mặc định là TẮT .

Quan trọng

Hoạt động lập chỉ mục trực tuyến không khả dụng trong mọi phiên bản của MicrosoftSQL Server. Để biết danh sách các tính năng được hỗ trợ bởi các phiên bản của SQL Server, hãy xem Phiên bản và các tính năng được hỗ trợ cho SQL Server 2016 .

BẬT
Khóa bảng dài hạn không được giữ trong suốt thời gian hoạt động của chỉ mục. Trong giai đoạn chính của hoạt động chỉ mục, chỉ có khóa Chia sẻ ý định (IS) được giữ trên bảng nguồn. Điều này cho phép tiến hành các truy vấn hoặc cập nhật đối với bảng và chỉ mục bên dưới. Khi bắt đầu hoạt động, khóa Chia sẻ (S) được giữ trên đối tượng nguồn trong một khoảng thời gian rất ngắn. Khi kết thúc hoạt động, trong một khoảng thời gian ngắn, khóa S (Chia sẻ) được nhận trên nguồn nếu một chỉ mục không hợp nhất đang được tạo. Khóa Sch-M (Sửa đổi lược đồ) được nhận khi một chỉ mục nhóm được tạo hoặc bị loại bỏ trực tuyến và khi một chỉ mục được nhóm hoặc không được phân loại đang được xây dựng lại. Không thể đặt ONLINE thành ON khi một chỉ mục đang được tạo trên một bảng tạm thời cục bộ.

Lưu ý

Tạo chỉ mục trực tuyến có thể đặt các tùy chọn low_priasty_lock_wait , xem WAIT_AT_LOW_PRIORITY với các thao tác lập chỉ mục trực tuyến .

TẮT
Khóa bảng được áp dụng trong suốt thời gian hoạt động chỉ mục. Thao tác lập chỉ mục ngoại tuyến tạo, xây dựng lại hoặc loại bỏ chỉ mục được nhóm hoặc xây dựng lại hoặc loại bỏ chỉ mục không hợp nhất, có được khóa sửa đổi giản đồ (Sch-M) trên bảng. Điều này ngăn chặn tất cả quyền truy cập của người dùng vào bảng bên dưới trong suốt thời gian hoạt động. Thao tác lập chỉ mục ngoại tuyến tạo ra một chỉ mục không hợp nhất có được một khóa Chia sẻ (S) trên bảng. Điều này ngăn các cập nhật cho bảng bên dưới nhưng cho phép đọc các thao tác, chẳng hạn như câu lệnh SELECT.

Để biết thêm thông tin, hãy xem Thực hiện thao tác lập chỉ mục trực tuyến .

Các chỉ mục, bao gồm các chỉ mục trên bảng tạm thời chung, có thể được tạo trực tuyến ngoại trừ các trường hợp sau:

  • Chỉ mục XML
  • Lập chỉ mục trên bảng tạm thời cục bộ
  • Chỉ mục được nhóm duy nhất ban đầu trên một chế độ xem
  • Các chỉ mục nhóm đã bị vô hiệu hóa
  • Chỉ mục Columnstore
  • Chỉ mục theo nhóm, nếu bảng bên dưới chứa các kiểu dữ liệu LOB ( hình ảnh , ntext , văn bản ) và các kiểu dữ liệu không gian
  • Các cột

  • varchar (max) varbinary (max) không được là một phần của khóa chỉ mục. Trong SQL Server (Bắt đầu với SQL Server 2012 (11.x)) và Cơ sở dữ liệu Azure SQL, khi một bảng chứa các cột varchar (max) hoặc varbinary (max) , a Chỉ mục nhóm chứa các cột khác có thể được tạo hoặc tạo lại bằng cách sử dụng tùy chọn ONLINE .

Để biết thêm thông tin, hãy xem Cách hoạt động của hoạt động lập chỉ mục trực tuyến .

RESUMABLE = {ON | TẮT}

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

Chỉ định xem hoạt động lập chỉ mục trực tuyến có thể tiếp tục được hay không.

BẬT
Hoạt động lập chỉ mục có thể tiếp tục.

TẮT
Thao tác lập chỉ mục không thể tiếp tục.

MAX_DURATION = time [MINUTES] được sử dụng với RESUMABLE = ON (yêu cầu < mã> ONLINE = ON )

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

Cho biết thời gian (một giá trị số nguyên được chỉ định bằng phút) mà hoạt động lập chỉ mục trực tuyến có thể tiếp tục được thực thi trước khi bị tạm dừng.

Quan trọng

Để biết thêm thông tin chi tiết về các thao tác lập chỉ mục có thể được thực hiện trực tuyến, hãy xem Nguyên tắc về Thao tác lập chỉ mục trực tuyến .

Lưu ý

Việc xây dựng lại chỉ mục trực tuyến có thể tiếp tục không được hỗ trợ trên các chỉ mục của columnstore.

ALLOW_ROW_LOCKS = {ON | TẮT}

Chỉ định xem có cho phép các khóa hàng hay không. Giá trị mặc định là BẬT .

BẬT
Khóa hàng được phép khi truy cập chỉ mục. Công cụ Cơ sở dữ liệu xác định khi nào các khóa hàng được sử dụng.

TẮT
Khóa hàng không được sử dụng.

ALLOW_PAGE_LOCKS = {ON | TẮT}

Chỉ định xem có cho phép khóa trang hay không. Giá trị mặc định là BẬT .

BẬT
Khóa trang được phép khi truy cập chỉ mục. Cơ sở dữ liệu xác định thời điểm sử dụng khóa trang.

TẮT
Khóa trang không được sử dụng.

OPTIMIZE_FOR_SEQUENTIAL_KEY = {ON | TẮT}

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

Chỉ định xem có nên tối ưu hóa cho tranh chấp chèn trang cuối cùng hay không. Giá trị mặc định là TẮT . Xem phần Khóa tuần tự để biết thêm thông tin.

MAXDOP = max_degree_of_parallelism

Ghi đè tùy chọn cấu hình mức độ song song tối đa trong suốt thời gian hoạt động chỉ mục. Để biết thêm thông tin, hãy xem Định cấu hình Tùy chọn cấu hình máy chủ ở mức độ song song tối đa . Sử dụng MAXDOP để giới hạn số lượng bộ xử lý được sử dụng trong quá trình thực thi kế hoạch song song. Tối đa là 64 bộ xử lý.

max_degree_of_parallelism có thể là:

1
Ngăn chặn việc tạo kế hoạch song song.

& gt; 1
Giới hạn số lượng bộ xử lý tối đa được sử dụng trong hoạt động lập chỉ mục song song ở số lượng được chỉ định hoặc ít hơn dựa trên khối lượng công việc hiện tại của hệ thống.

0 (mặc định)
Sử dụng số lượng bộ xử lý thực tế trở xuống dựa trên khối lượng công việc hiện tại của hệ thống.

Để biết thêm thông tin, hãy xem Định cấu hình hoạt động chỉ mục song song .

Lưu ý

Các thao tác lập chỉ mục song song không khả dụng trong mọi phiên bản của MicrosoftSQL Server. Để biết danh sách các tính năng được hỗ trợ bởi các phiên bản của SQL Server, hãy xem Phiên bản và các tính năng được hỗ trợ dành cho SQL Server 2016 Các phiên bản và tính năng được hỗ trợ dành cho SQL Server 2017 .

DATA_COMPRESSION

Chỉ định tùy chọn nén dữ liệu cho chỉ mục, số phân vùng hoặc phạm vi phân vùng được chỉ định. Các tùy chọn như sau:

KHÔNG CÓ
Chỉ mục hoặc các phân vùng được chỉ định không được nén.

ROW
Chỉ mục hoặc các phân vùng được chỉ định được nén bằng cách sử dụng nén hàng.

TRANG
Chỉ mục hoặc các phân vùng cụ thể được nén bằng cách sử dụng tính năng nén trang.

Để biết thêm thông tin về nén, hãy xem Nén dữ liệu .

XML_COMPRESSION

Áp dụng cho : Bản xem trước SQL Server 2022 (16.x) trở lên và Bản xem trước cơ sở dữ liệu Azure SQL.

Chỉ định tùy chọn nén XML cho chỉ mục được chỉ định có chứa một hoặc nhiều cột kiểu dữ liệu xml . Các tùy chọn như sau:

BẬT
Chỉ mục hoặc các phân vùng được chỉ định được nén bằng cách sử dụng nén XML.

TẮT
Chỉ mục hoặc các phân vùng được chỉ định không được nén.

TRÊN CÁC PHẦN ({& lt; partition_number_expression & gt; | & lt; range & gt;} [, … n])

Chỉ định các phân vùng áp dụng cài đặt DATA_COMPRESSION hoặc XML_COMPRESSION . Nếu chỉ mục không được phân vùng, đối số ON PARTITIONS sẽ tạo ra lỗi. Nếu mệnh đề ON PARTITIONS không được cung cấp, tùy chọn DATA_COMPRESSION hoặc XML_COMPRESSION sẽ áp dụng cho tất cả các phân vùng của chỉ mục được phân vùng.

Lưu ý

XML_COMPRESSION chỉ khả dụng bắt đầu với Bản xem trước SQL Server 2022 (16.x) và Bản xem trước cơ sở dữ liệu Azure SQL.

& lt; partition_number_expression & gt; có thể được chỉ định theo những cách sau:

  • Cung cấp số cho một phân vùng, ví dụ: ON PARTITIONS (2) .
  • Cung cấp số phân vùng cho một số phân vùng riêng lẻ được phân tách bằng dấu phẩy, ví dụ: ON PARTITIONS (1, 5) .
  • Cung cấp cả phạm vi và phân vùng riêng lẻ, ví dụ: ON PARTITIONS (2, 4, 6 TO 8) .

& lt; range & gt; có thể được chỉ định làm số phân vùng được phân tách bằng từ TO, ví dụ: ON PARTITIONS (6 TO 8) .

Để đặt các kiểu nén dữ liệu khác nhau cho các phân vùng khác nhau, hãy chỉ định tùy chọn DATA_COMPRESSION nhiều lần, ví dụ:

  REBUILD VỚI
(
  DATA_COMPRESSION = KHÔNG CÓ PHẦN (1),
  DATA_COMPRESSION = ROW TRÊN CÁC PHẦN (2, 4, 6 ĐẾN 8),
  DATA_COMPRESSION = TRANG TRÊN CÁC PHẦN (3, 5)
);
 

Bạn cũng có thể chỉ định tùy chọn XML_COMPRESSION nhiều lần, ví dụ:

  REBUILD VỚI
(
  XML_COMPRESSION = TẮT TRÊN CÁC PHẦN (1),
  XML_COMPRESSION = BẬT TRÊN CÁC PHẦN (2, 4, 6 ĐẾN 8),
  XML_COMPRESSION = TẮT TRÊN CÁC PHẦN (3, 5)
);
 

Nhận xét

Câu lệnh CREATE INDEX được tối ưu hóa giống như bất kỳ truy vấn nào khác. Để tiết kiệm các hoạt động I / O, bộ xử lý truy vấn có thể chọn quét một chỉ mục khác thay vì thực hiện quét bảng. Thao tác sắp xếp có thể bị loại bỏ trong một số trường hợp. Trên máy tính đa xử lý, CREATE INDEX có thể sử dụng nhiều bộ xử lý hơn để thực hiện các thao tác quét và sắp xếp liên quan đến việc tạo chỉ mục, theo cách giống như các truy vấn khác. Để biết thêm thông tin, hãy xem Định cấu hình hoạt động chỉ mục song song .

Thao tác CREATE INDEX có thể được ghi lại ở mức tối thiểu nếu mô hình khôi phục cơ sở dữ liệu được đặt thành ghi hàng loạt hoặc đơn giản.

Chỉ mục có thể được tạo trên một bảng tạm thời. Khi bảng bị loại bỏ hoặc phiên kết thúc, các chỉ mục sẽ bị loại bỏ.

Chỉ mục được phân nhóm có thể được tạo trên một biến bảng khi Khóa chính được tạo. Khi truy vấn hoàn tất hoặc phiên kết thúc, chỉ mục sẽ bị loại bỏ.

Các chỉ mục hỗ trợ các thuộc tính mở rộng.

Chỉ mục được nhóm

Tạo chỉ mục nhóm trên bảng (heap) hoặc giảm và tạo lại chỉ mục nhóm hiện có yêu cầu không gian làm việc bổ sung có sẵn trong cơ sở dữ liệu để phù hợp với việc sắp xếp dữ liệu và bản sao tạm thời của bảng gốc hoặc dữ liệu chỉ mục được phân nhóm hiện có. Để biết thêm thông tin về các chỉ mục được phân nhóm, hãy xem Tạo chỉ mục được phân nhóm Hướng dẫn thiết kế và kiến ​​trúc chỉ mục SQL Server .

Chỉ mục không phân biệt

Bắt đầu với SQL Server 2016 (13.x) và trong Cơ sở dữ liệu Azure SQL, bạn có thể tạo chỉ mục không hợp nhất trên bảng được lưu trữ dưới dạng chỉ mục lưu trữ cột theo cụm. Nếu lần đầu tiên bạn tạo chỉ mục không phân cụm trên bảng được lưu trữ dưới dạng chỉ mục đống hoặc chỉ mục nhóm, chỉ mục sẽ vẫn tồn tại nếu sau đó bạn chuyển đổi bảng thành chỉ mục phân nhóm theo nhóm. Cũng không cần thiết phải giảm chỉ mục không hợp nhất khi bạn xây dựng lại chỉ mục cửa hàng cột theo nhóm.

Hạn chế và Hạn chế:

  • Tùy chọn FILESTREAM_ON không hợp lệ khi bạn tạo chỉ mục không hợp nhất trên một bảng được lưu trữ dưới dạng chỉ mục lưu trữ cột theo cụm.

Chỉ mục duy nhất

Khi một chỉ mục duy nhất tồn tại, Công cụ Cơ sở dữ liệu sẽ kiểm tra các giá trị trùng lặp mỗi khi dữ liệu được thêm vào bằng các thao tác chèn. Các thao tác chèn sẽ tạo ra các giá trị khóa trùng lặp được khôi phục và Công cụ cơ sở dữ liệu hiển thị thông báo lỗi. Điều này đúng ngay cả khi thao tác chèn thay đổi nhiều hàng nhưng chỉ gây ra một bản sao. Nếu cố gắng nhập dữ liệu có chỉ mục duy nhất và mệnh đề IGNORE_DUP_KEY được đặt thành BẬT, thì chỉ những hàng vi phạm chỉ mục DUY NHẤT mới không thành công.

Chỉ mục được phân vùng

Các chỉ mục được phân vùng được tạo và duy trì theo cách tương tự như các bảng được phân vùng, nhưng giống như các chỉ mục thông thường, chúng được xử lý như các đối tượng cơ sở dữ liệu riêng biệt. Bạn có thể có chỉ mục được phân vùng trên bảng không được phân vùng và bạn có thể có chỉ mục không được phân vùng trên bảng đã được phân vùng.

Nếu bạn đang tạo chỉ mục trên bảng được phân vùng và không chỉ định nhóm tệp để đặt chỉ mục trên đó, chỉ mục được phân vùng theo cách giống như bảng bên dưới. Điều này là do các chỉ mục, theo mặc định, được đặt trên cùng một nhóm tệp với các bảng bên dưới của chúng và cho một bảng được phân vùng trong cùng một lược đồ phân vùng sử dụng cùng các cột phân vùng. Khi chỉ mục sử dụng cùng một lược đồ phân vùng và cột phân vùng như bảng, chỉ mục sẽ được căn chỉnh với bảng.

Cảnh báo

Có thể tạo và xây dựng lại các chỉ mục không được đánh dấu trên một bảng có hơn 1.000 phân vùng, nhưng không được hỗ trợ. Làm như vậy có thể làm giảm hiệu suất hoặc tiêu thụ quá nhiều bộ nhớ trong các hoạt động này. Chúng tôi khuyên bạn chỉ nên sử dụng các chỉ mục được căn chỉnh khi số lượng phân vùng vượt quá 1.000.

Khi phân vùng một chỉ mục nhóm, không phải duy nhất, theo mặc định, Công cụ cơ sở dữ liệu sẽ thêm bất kỳ cột phân vùng nào vào danh sách các khóa chỉ mục được nhóm, nếu chưa được chỉ định.

Các dạng xem được lập chỉ mục có thể được tạo trên các bảng được phân vùng theo cách giống như các chỉ mục trên bảng. Để biết thêm thông tin về chỉ mục được phân vùng, hãy xem Bảng và chỉ mục được phân vùng Hướng dẫn thiết kế và kiến ​​trúc chỉ mục máy chủ SQL .

Trong SQL Server, thống kê không được tạo bằng cách quét tất cả các hàng trong bảng khi một chỉ mục phân vùng được tạo hoặc xây dựng lại. Thay vào đó, trình tối ưu hóa truy vấn sử dụng thuật toán lấy mẫu mặc định để tạo thống kê. Để nhận thống kê về các chỉ mục được phân vùng bằng cách quét tất cả các hàng trong bảng, hãy sử dụng TẠO THỐNG KÊ hoặc CẬP NHẬT THỐNG KÊ với mệnh đề FULLSCAN .

Các chỉ mục đã lọc

Chỉ mục được lọc là chỉ mục không được phân loại được tối ưu hóa, phù hợp với các truy vấn chọn một tỷ lệ phần trăm nhỏ các hàng từ một bảng. Nó sử dụng một vị từ bộ lọc để lập chỉ mục một phần dữ liệu trong bảng. Chỉ mục được lọc được thiết kế tốt có thể cải thiện hiệu suất truy vấn, giảm chi phí lưu trữ và giảm chi phí bảo trì.

Xem Thêm  CSS · Bootstrap - class trong css

Tùy chọn SET bắt buộc cho các chỉ mục được lọc

Tùy chọn SET trong cột Giá trị Bắt buộc là bắt buộc bất cứ khi nào xảy ra bất kỳ điều kiện nào sau đây:

  • Tạo một chỉ mục đã lọc.

  • Thao tác INSERT, UPDATE, DELETE hoặc MERGE sửa đổi dữ liệu trong một chỉ mục đã lọc.

  • Chỉ mục đã lọc được sử dụng bởi trình tối ưu hoá truy vấn để tạo ra kế hoạch truy vấn.

    ĐẶT tùy chọn
    Giá trị bắt buộc
    Giá trị máy chủ mặc định
    Giá trị

    OLE DB và ODBC mặc định
    Giá trị

    DB-Library mặc định

    ANSI_NULLS
    TRÊN
    TRÊN
    TRÊN
    TẮT

    ANSI_PADDING
    TRÊN
    TRÊN
    TRÊN
    TẮT

    ANSI_WARNINGS *
    TRÊN
    TRÊN
    TRÊN
    TẮT

    ARITHABORT
    TRÊN
    TRÊN
    TẮT
    TẮT

    CONCAT_NULL_YIELDS_NULL
    TRÊN
    TRÊN
    TRÊN
    TẮT

    NUMERIC_ROUNDABORT
    TẮT
    TẮT
    TẮT
    TẮT

    QUOTED_IDENTIFIER
    TRÊN
    TRÊN
    TRÊN
    TẮT

    • Đặt ANSI_WARNINGS thành BẬT hoàn toàn đặt ARITHABORT thành BẬT khi mức tương thích cơ sở dữ liệu được đặt thành 90 hoặc cao hơn. Nếu mức độ tương thích cơ sở dữ liệu được đặt thành 80 trở xuống, thì tùy chọn ARITHABORT phải được đặt thành BẬT một cách rõ ràng.

Nếu các tùy chọn SET không chính xác, các điều kiện sau có thể xảy ra:

  • Chỉ mục được lọc không được tạo.
  • Công cụ Cơ sở dữ liệu tạo ra lỗi và quay lại các câu lệnh INSERT, UPDATE, DELETE hoặc MERGE thay đổi dữ liệu trong chỉ mục.
  • Trình tối ưu hóa truy vấn không xem xét chỉ mục trong kế hoạch thực thi cho bất kỳ câu lệnh Transact-SQL nào.

Để biết thêm thông tin về Chỉ mục được lọc, hãy xem Tạo Chỉ mục được lọc Hướng dẫn thiết kế và kiến ​​trúc chỉ mục máy chủ SQL .

Chỉ mục không gian

Để biết thông tin về chỉ mục không gian, hãy xem TẠO CHỈ SỐ KHÔNG GIAN Tổng quan về chỉ mục không gian .

Chỉ mục XML

Để biết thông tin về chỉ mục XML, hãy xem TẠO CHỈ SỐ XML Chỉ mục XML (SQL Server) .

Kích thước khóa chỉ mục

Kích thước tối đa cho khóa chỉ mục là 900 byte đối với chỉ mục được phân nhóm và 1.700 byte đối với chỉ mục không được phân nhóm. (Trước Cơ sở dữ liệu SQL và SQL Server 2016 (13.x), giới hạn luôn là 900 byte.) Chỉ mục trên cột varchar vượt quá giới hạn byte có thể được tạo nếu dữ liệu hiện có trong cột không vượt quá giới hạn tại thời điểm chỉ mục được tạo; tuy nhiên, các hành động chèn hoặc cập nhật tiếp theo trên các cột khiến tổng kích thước lớn hơn giới hạn sẽ không thành công. Khóa chỉ mục của chỉ mục được phân nhóm không được chứa các cột varchar có dữ liệu hiện có trong đơn vị phân bổ ROW_OVERFLOW_DATA. Nếu chỉ mục nhóm được tạo trên cột varchar và dữ liệu hiện có nằm trong đơn vị cấp phát IN_ROW_DATA, thì các hành động chèn hoặc cập nhật tiếp theo trên cột sẽ đẩy dữ liệu ra khỏi hàng sẽ không thành công.

Chỉ mục không phân tán có thể bao gồm các cột không quan trọng trong cấp độ lá của chỉ mục. Các cột này không được Công cụ cơ sở dữ liệu xem xét khi tính toán kích thước khóa chỉ mục. Để biết thêm thông tin, hãy xem Tạo chỉ mục với các cột đi kèm Hướng dẫn thiết kế và kiến ​​trúc chỉ mục máy chủ SQL .

Lưu ý

Khi các bảng được phân vùng, nếu các cột khoá phân vùng chưa có trong chỉ mục nhóm không phải là duy nhất, chúng sẽ được Cơ sở dữ liệu thêm vào chỉ mục. Kích thước tổng hợp của các cột được lập chỉ mục (không tính các cột được bao gồm), cộng với bất kỳ cột phân vùng nào được thêm vào không được vượt quá 1800 byte trong một chỉ mục được phân nhóm không phải duy nhất.

Các cột được tính

Chỉ mục có thể được tạo trên các cột được tính toán. Ngoài ra, các cột được tính toán có thể có thuộc tính ĐÃ ĐƯỢC ĐĂNG KÝ. Điều này có nghĩa là Công cụ cơ sở dữ liệu lưu trữ các giá trị được tính toán trong bảng và cập nhật chúng khi bất kỳ cột nào khác mà cột được tính phụ thuộc được cập nhật. Công cụ cơ sở dữ liệu sử dụng các giá trị lâu dài này khi tạo chỉ mục trên cột và khi chỉ mục được tham chiếu trong một truy vấn.

Để lập chỉ mục một cột được tính toán, cột được tính toán phải xác định và chính xác. Tuy nhiên, việc sử dụng thuộc tính PERSISTED sẽ mở rộng loại cột được tính toán có thể lập chỉ mục để bao gồm:

  • Các cột được tính toán dựa trên các hàm Transact-SQL và CLR cũng như các phương pháp loại CLR do người dùng xác định được người dùng đánh dấu là xác định.
  • Các cột được tính toán dựa trên các biểu thức xác định như được xác định bởi Công cụ cơ sở dữ liệu nhưng không chính xác.

Các cột được tính liên tục yêu cầu các tùy chọn SET sau phải được đặt như được hiển thị trong phần trước Tùy chọn SET được yêu cầu cho các chỉ mục được lọc .

Ràng buộc UNIQUE hoặc PRIMARY KEY có thể chứa một cột được tính toán miễn là nó đáp ứng tất cả các điều kiện để lập chỉ mục. Cụ thể, cột được tính toán phải xác định và chính xác hoặc xác định và tồn tại. Để biết thêm thông tin về thuyết xác định, hãy xem Hàm xác định và không xác định .

Các cột được tính toán bắt nguồn từ image , ntext , text , varchar (max) , nvarchar Các loại dữ liệu (max) , varbinary (max) xml có thể được lập chỉ mục dưới dạng khóa hoặc cột không phải khóa được bao gồm miễn là cột được tính kiểu dữ liệu được phép làm cột khóa chỉ mục hoặc cột không khóa. Ví dụ: bạn không thể tạo chỉ mục XML chính trên cột xml được tính toán. Nếu kích thước khóa chỉ mục vượt quá 900 byte, một thông báo cảnh báo sẽ hiển thị.

Tạo chỉ mục trên một cột được tính toán có thể gây ra lỗi cho thao tác chèn hoặc cập nhật đã hoạt động trước đó. Một lỗi như vậy có thể xảy ra khi cột được tính toán dẫn đến lỗi số học. Ví dụ, trong bảng sau, mặc dù cột được tính toán c dẫn đến lỗi số học, câu lệnh INSERT hoạt động.

  TẠO BẢNG t1 (a INT, b INT, c AS a / b);
CHÈN VÀO CÁC GIÁ TRỊ t1 (1, 0);
 

Thay vào đó, nếu sau khi tạo bảng, bạn tạo chỉ mục trên cột được tính toán c , thì câu lệnh INSERT tương tự bây giờ sẽ không thành công.

  TẠO BẢNG t1 (a INT, b INT, c AS a / b);
TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH DUY NHẤT Idx1 TRÊN t1 (c);
CHÈN VÀO CÁC GIÁ TRỊ t1 (1, 0);
 

Để biết thêm thông tin, hãy xem Chỉ mục trên các cột được tính toán .

Các cột được bao gồm trong chỉ mục

Các cột không chính, được gọi là cột được bao gồm, có thể được thêm vào cấp độ lá của chỉ mục không phân biệt để cải thiện hiệu suất truy vấn bằng cách bao gồm truy vấn. Nghĩa là, tất cả các cột được tham chiếu trong truy vấn đều được đưa vào chỉ mục dưới dạng cột khóa hoặc cột không khóa. Điều này cho phép trình tối ưu hóa truy vấn xác định vị trí tất cả thông tin cần thiết từ quá trình quét chỉ mục; bảng hoặc dữ liệu chỉ mục nhóm không được truy cập. Để biết thêm thông tin, hãy xem Tạo chỉ mục với các cột đi kèm Hướng dẫn thiết kế và kiến ​​trúc chỉ mục máy chủ SQL .

Chỉ định các tùy chọn chỉ mục

SQL Server 2005 (9.x) đã giới thiệu các tùy chọn chỉ mục mới và cũng sửa đổi cách thức mà các tùy chọn được chỉ định. Trong cú pháp tương thích ngược, WITH option_name tương đương với WITH (option_name = ON) . Khi bạn đặt các tùy chọn chỉ mục, các quy tắc sau sẽ áp dụng:

  • Chỉ có thể chỉ định các tùy chọn chỉ mục mới bằng cách sử dụng WITH (& lt; option_name & gt; = & lt; ON | OFF & gt;) .
  • Không thể chỉ định các tùy chọn bằng cách sử dụng cả cú pháp tương thích ngược và cú pháp mới trong cùng một câu lệnh. Ví dụ: việc chỉ định WITH (DROP_EXISTING, ONLINE = ON) khiến câu lệnh bị lỗi.
  • Khi bạn tạo chỉ mục XML, các tùy chọn phải được chỉ định bằng cách sử dụng WITH (& lt; option_name & gt; = & lt; ON | OFF & gt;) .

Mệnh đề DROP_EXISTING

Bạn có thể sử dụng mệnh đề DROP_EXISTING để xây dựng lại chỉ mục, thêm hoặc bớt cột, sửa đổi tùy chọn, sửa đổi thứ tự sắp xếp cột hoặc thay đổi lược đồ phân vùng hoặc nhóm tệp.

Nếu chỉ mục thực thi ràng buộc CHÍNH hoặc DUY NHẤT và định nghĩa chỉ mục không bị thay đổi theo bất kỳ cách nào, chỉ mục sẽ bị loại bỏ và được tạo lại duy trì ràng buộc hiện có. Tuy nhiên, nếu định nghĩa chỉ mục được thay đổi, câu lệnh không thành công. Để thay đổi định nghĩa của khóa CHÍNH hoặc Ràng buộc DUY NHẤT, hãy loại bỏ ràng buộc và thêm một ràng buộc với định nghĩa mới.

DROP_EXISTING nâng cao hiệu suất khi bạn tạo lại chỉ mục nhóm, với cùng một nhóm khóa hoặc nhóm khóa khác nhau, trên bảng cũng có chỉ mục không gộp. DROP_EXISTING thay thế việc thực thi câu lệnh DROP INDEX trên chỉ mục nhóm cũ, sau đó thực thi câu lệnh CREATE INDEX cho chỉ mục nhóm mới. Các chỉ mục không hợp nhất được tạo lại một lần và sau đó chỉ khi định nghĩa chỉ mục đã thay đổi. Mệnh đề DROP_EXISTING không xây dựng lại các chỉ mục không hợp nhất khi định nghĩa chỉ mục có cùng tên chỉ mục, khóa và cột phân vùng, thuộc tính duy nhất và thứ tự sắp xếp như chỉ mục gốc.

Cho dù các chỉ mục không phân bổ có được xây dựng lại hay không, chúng vẫn luôn nằm trong nhóm tệp hoặc lược đồ phân vùng ban đầu và sử dụng các chức năng phân vùng ban đầu. Nếu một chỉ mục được phân nhóm được xây dựng lại thành một nhóm tệp hoặc lược đồ phân vùng khác, các chỉ mục không phân nhóm sẽ không được di chuyển để trùng với vị trí mới của chỉ mục được phân nhóm. Do đó, ngay cả những chỉ mục không được phân bổ trước đây đã được căn chỉnh với chỉ mục được phân nhóm, chúng có thể không còn được căn chỉnh với nó nữa. Để biết thêm thông tin về căn chỉnh chỉ mục được phân vùng, hãy xem Bảng và chỉ mục được phân vùng .

Mệnh đề DROP_EXISTING sẽ không sắp xếp lại dữ liệu nếu các cột khóa chỉ mục giống nhau được sử dụng theo cùng một thứ tự và với cùng một thứ tự tăng dần hoặc giảm dần, trừ khi câu lệnh chỉ mục chỉ định một chỉ mục không gộp và Tùy chọn ONLINE được đặt thành TẮT. Nếu chỉ mục nhóm bị vô hiệu hóa, thao tác TẠO CHỈ SỐ VỚI DROP_EXISTING phải được thực hiện với ONLINE được đặt thành TẮT. Nếu một chỉ mục không hợp nhất bị vô hiệu hóa và không được liên kết với một chỉ mục nhóm đã bị vô hiệu hóa, thì thao tác TẠO CHỈ SỐ VỚI DROP_EXISTING có thể được thực hiện với ONLINE được đặt thành TẮT hoặc BẬT.

Lưu ý

Khi các chỉ mục có 128 mức độ trở lên bị loại bỏ hoặc xây dựng lại, Công cụ cơ sở dữ liệu sẽ xác định vị trí giao dịch trang thực tế và các khóa liên quan của chúng, cho đến sau khi giao dịch được thực hiện.

Tùy chọn TRỰC TUYẾN

Các nguyên tắc sau áp dụng để thực hiện các thao tác lập chỉ mục trực tuyến:

  • Không thể thay đổi, cắt bớt hoặc bỏ bảng cơ sở trong khi hoạt động lập chỉ mục trực tuyến đang diễn ra.
  • Cần có thêm dung lượng đĩa tạm thời trong quá trình hoạt động chỉ mục.
  • Các hoạt động trực tuyến có thể được thực hiện trên các chỉ mục và chỉ mục được phân vùng có chứa các cột được tính toán liên tục hoặc các cột được bao gồm.
  • Tùy chọn đối số low_priasty_lock_wait cho phép bạn quyết định cách hoạt động lập chỉ mục có thể tiến hành khi bị chặn trên khóa Sch-M. Tính năng này hiện chỉ được hỗ trợ trong Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure.

Để biết thêm thông tin, hãy xem Thực hiện thao tác lập chỉ mục trực tuyến .

Tài nguyên

Các tài nguyên sau là bắt buộc để hoạt động tạo chỉ mục trực tuyến có thể tiếp tục:

  • Cần có thêm không gian để tiếp tục tạo chỉ mục, bao gồm cả thời gian chỉ mục bị tạm dừng
  • Thông lượng nhật ký bổ sung trong giai đoạn sắp xếp. Việc sử dụng không gian nhật ký tổng thể cho chỉ mục có thể tiếp tục ít hơn so với việc tạo chỉ mục trực tuyến thông thường và cho phép cắt ngắn nhật ký trong quá trình hoạt động này.
  • Trạng thái DDL ngăn cản mọi sửa đổi DDL
  • Dọn dẹp ma bị chặn trên chỉ mục trong bản dựng trong suốt thời gian hoạt động cả khi bị tạm dừng và trong khi hoạt động đang chạy.

Các giới hạn chức năng hiện tại

Chức năng sau bị tắt đối với các hoạt động tạo chỉ mục có thể tiếp tục:

  • Sau khi tạm dừng hoạt động tạo chỉ mục trực tuyến có thể tiếp tục lại, bạn không thể thay đổi giá trị ban đầu của MAXDOP

  • Tạo một chỉ mục chứa:

    • (Các) cột được tính toán hoặc TIMESTAMP làm cột chính
    • Cột LOB làm cột được bao gồm để tạo chỉ mục có thể tiếp tục
    • Chỉ mục đã lọc

Thao tác lập chỉ mục có thể tiếp tục

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

Các nguyên tắc sau áp dụng cho các hoạt động chỉ mục có thể tiếp tục:

  • Tạo chỉ mục trực tuyến được chỉ định là có thể tiếp tục bằng cách sử dụng tùy chọn RESUMABLE = ON .
  • Tùy chọn RESUMABLE không tồn tại trong siêu dữ liệu cho một chỉ mục nhất định và chỉ áp dụng cho thời lượng của câu lệnh DDL hiện tại. Do đó, mệnh đề RESUMABLE = ON phải được chỉ định rõ ràng để kích hoạt khả năng tiếp tục.
  • Tùy chọn

  • MAX_DURATION chỉ được hỗ trợ cho tùy chọn RESUMABLE = ON .
  • MAX_DURATION cho tùy chọn RESUMABLE chỉ định khoảng thời gian cho một chỉ mục được tạo. Khi thời gian này được sử dụng, việc xây dựng chỉ mục sẽ bị tạm dừng hoặc nó hoàn tất quá trình thực thi. Người dùng quyết định thời điểm có thể tiếp tục xây dựng chỉ mục bị tạm dừng. Thời gian tính bằng phút cho MAX_DURATION phải lớn hơn 0 phút và nhỏ hơn hoặc bằng một tuần (7 * 24 * 60 = 10080 phút). Việc tạm dừng hoạt động chỉ mục trong thời gian dài có thể ảnh hưởng đến hiệu suất DML trên một bảng cụ thể cũng như dung lượng đĩa cơ sở dữ liệu vì cả lập chỉ mục bảng gốc và bảng mới được tạo đều yêu cầu dung lượng đĩa và cần được cập nhật trong quá trình hoạt động DML. Nếu tùy chọn MAX_DURATION bị bỏ qua, hoạt động lập chỉ mục sẽ tiếp tục cho đến khi hoàn thành hoặc cho đến khi xảy ra lỗi.
  • Để tạm dừng ngay lập tức thao tác lập chỉ mục, bạn có thể dừng (Ctrl-C) lệnh đang diễn ra, thực hiện lệnh TẠM DỪNG ALTER INDEX hoặc thực thi lệnh KILL & lt; session_id & gt; lệnh. Sau khi lệnh bị tạm dừng, lệnh có thể được tiếp tục bằng cách sử dụng lệnh ALTER INDEX .
  • Thực thi lại câu lệnh CREATE INDEX ban đầu để có chỉ mục có thể tiếp tục, tự động tiếp tục hoạt động tạo chỉ mục bị tạm dừng.
  • Tùy chọn SORT_IN_TEMPDB = ON không được hỗ trợ cho chỉ mục có thể tiếp tục.
  • Không thể thực thi lệnh DDL với RESUMABLE = ON bên trong một giao dịch rõ ràng (không thể là một phần của khối begin TRAN ... COMMIT ). < / li>
  • Để tiếp tục / hủy bỏ quá trình tạo / tạo chỉ mục, hãy sử dụng cú pháp T-SQL ALTER INDEX

Lưu ý

Lệnh DDL chạy cho đến khi hoàn thành, tạm dừng hoặc không thành công. Trong trường hợp lệnh tạm dừng, một lỗi sẽ được đưa ra cho biết rằng thao tác đã bị tạm dừng và việc tạo chỉ mục chưa hoàn tất. Bạn có thể lấy thêm thông tin về trạng thái chỉ mục hiện tại từ sys.index_resumable_operations . Như trước đây, trong trường hợp thất bại, lỗi cũng sẽ được phát hành.

Để cho biết rằng việc tạo chỉ mục được thực thi dưới dạng hoạt động có thể tiếp tục và để kiểm tra trạng thái thực thi hiện tại của nó, hãy xem sys.index_resumable_operations .

WAIT_AT_LOW_PRIORITY với các thao tác lập chỉ mục trực tuyến

Áp dụng cho : Cú pháp này cho CREATE INDEX hiện chỉ áp dụng cho Cơ sở dữ liệu Azure SQL và Azure SQL Managed Instance. Đối với ALTER INDEX , cú pháp này áp dụng cho SQL Server (Bắt đầu với SQL Server 2014 (12.x)) và Cơ sở dữ liệu Azure SQL. Để biết thêm thông tin, hãy xem ALTER INDEX .

CácCú pháp low_priasty_lock_wait cho phép chỉ định hành vi của WAIT_AT_LOW_PRIORITY . WAIT_AT_LOW_PRIORITY chỉ có thể được sử dụng với ONLINE = ON .

Tùy chọn WAIT_AT_LOW_PRIORITY cho phép các DBA quản lý các khóa Sch-S và Sch-M cần thiết để tạo chỉ mục trực tuyến và cho phép họ chọn một trong 3 tùy chọn. Trong cả 3 trường hợp, nếu trong thời gian chờ MAX_DURATION = n [phút] , không có hoạt động chặn nào, thì việc xây dựng lại chỉ mục trực tuyến được thực hiện ngay lập tức mà không cần chờ đợi và câu lệnh DDL được hoàn tất.

WAIT_AT_LOW_PRIORITY cho biết rằng thao tác tạo chỉ mục trực tuyến sẽ đợi các khóa ưu tiên thấp, cho phép các thao tác khác tiếp tục trong khi thao tác tạo chỉ mục trực tuyến đang chờ. Bỏ qua tùy chọn WAIT AT THẤP PRIORITY tương đương với WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 phút, ABORT_AFTER_WAIT = NONE) .

MAX_DURATION = thời gian [ MINUTES ]

Thời gian chờ (một giá trị số nguyên được chỉ định bằng phút) mà khóa tạo chỉ mục trực tuyến sẽ đợi với mức độ ưu tiên thấp khi thực hiện lệnh DDL. Nếu thao tác bị chặn trong thời gian MAX_DURATION , thì hành động ABORT_AFTER_WAIT đã chỉ định sẽ được thực thi. Thời gian MAX_DURATION luôn tính bằng phút và từ MINUTES có thể được bỏ qua.

ABORT_AFTER_WAIT = [ KHÔNG CÓ | TỰ | CHẶN CHẶN }]

KHÔNG
Tiếp tục đợi khóa với mức độ ưu tiên bình thường (thông thường).

TỰ
Thoát khỏi chỉ mục trực tuyến tạo hoạt động DDL hiện đang được thực hiện mà không cần thực hiện bất kỳ hành động nào. Không thể sử dụng tùy chọn SELF với MAX_DURATION bằng 0.

CHẶN CHẶN
Hủy tất cả các giao dịch của người dùng chặn hoạt động xây dựng lại chỉ mục trực tuyến DDL để hoạt động có thể tiếp tục. Tùy chọn BLOCKERS yêu cầu đăng nhập phải có quyền ALTER BẤT KỲ KẾT NỐI nào.

Tùy chọn khóa hàng và khóa trang

Khi ALLOW_ROW_LOCKS = ON ALLOW_PAGE_LOCK = ON , các khóa cấp độ hàng, trang và bảng được cho phép khi truy cập chỉ mục. Công cụ Cơ sở dữ liệu chọn khóa thích hợp và có thể chuyển khóa từ khóa hàng hoặc khóa trang thành khóa bảng.

Khi ALLOW_ROW_LOCKS = OFF ALLOW_PAGE_LOCK = OFF , chỉ cho phép khóa cấp bảng khi truy cập chỉ mục.

Khóa tuần tự

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

Tranh chấp về chèn trang cuối là một vấn đề hiệu suất phổ biến xảy ra khi một số lượng lớn các chuỗi đồng thời cố gắng chèn các hàng vào một chỉ mục bằng khóa tuần tự. Chỉ mục được coi là tuần tự khi cột khóa hàng đầu chứa các giá trị luôn tăng (hoặc giảm), chẳng hạn như cột nhận dạng hoặc ngày mặc định là ngày / giờ hiện tại. Bởi vì các khóa được chèn là tuần tự, tất cả các hàng mới sẽ được chèn vào cuối cấu trúc chỉ mục - nói cách khác, trên cùng một trang. Điều này dẫn đến sự tranh giành trang trong bộ nhớ và có thể được quan sát thấy như một số chuỗi đang chờ trên PAGELATCH_EX cho trang được đề cập.

Bật tùy chọn chỉ mục OPTIMIZE_FOR_SEQUENTIAL_KEY cho phép tối ưu hóa trong công cụ cơ sở dữ liệu giúp cải thiện thông lượng cho các lần chèn đồng thời cao vào chỉ mục. Nó dành cho các chỉ mục có khóa tuần tự và do đó dễ gây tranh cãi về chèn trang cuối, nhưng nó cũng có thể hữu ích với các chỉ mục có điểm nóng trong các khu vực khác của cấu trúc chỉ mục B-Tree.

Lưu ý

Tài liệu SQL Server thường sử dụng thuật ngữ B-tree để tham chiếu đến các chỉ mục. Trong chỉ mục lưu trữ hàng, SQL Server triển khai cây B +. Điều này không áp dụng cho các chỉ mục cột hoặc kho lưu trữ dữ liệu trong bộ nhớ. Xem lại Hướng dẫn thiết kế và kiến ​​trúc chỉ mục SQL Server để biết chi tiết.

Xem thông tin chỉ mục

Để trả về thông tin về chỉ mục, bạn có thể sử dụng chế độ xem danh mục, chức năng hệ thống và quy trình được lưu trữ trong hệ thống.

Nén dữ liệu

Nén dữ liệu được mô tả trong chủ đề Nén dữ liệu . Sau đây là những điểm chính cần xem xét:

  • Tính năng nén có thể cho phép lưu trữ nhiều hàng hơn trên một trang, nhưng không thay đổi kích thước hàng tối đa.
  • Các trang không phải của chỉ mục không được nén trang nhưng có thể được nén theo hàng.
  • Mỗi chỉ mục không hợp nhất có một cài đặt nén riêng và không kế thừa cài đặt nén của bảng bên dưới.
  • Khi một chỉ mục được phân nhóm được tạo trên một đống, chỉ mục được phân nhóm sẽ kế thừa trạng thái nén của đống trừ khi một trạng thái nén thay thế được chỉ định.

Các hạn chế sau áp dụng cho các chỉ mục được phân vùng:

  • Bạn không thể thay đổi cài đặt nén của một phân vùng nếu bảng không có chỉ mục nào được đánh dấu.
  • ALTER INDEX & lt; index & gt; ... REBUILD PARTITION ... cú pháp xây dựng lại phân vùng được chỉ định của chỉ mục.
  • ALTER INDEX & lt; index & gt; Cú pháp ... REBUILD WITH ... xây dựng lại tất cả các phân vùng của chỉ mục.

Để đánh giá việc thay đổi trạng thái nén sẽ ảnh hưởng như thế nào đến bảng, chỉ mục hoặc phân vùng, hãy sử dụng quy trình được lưu trữ sp_estimate_data_compression_savings .

Nén XML

Áp dụng cho : Bản xem trước SQL Server 2022 (16.x) trở lên và Bản xem trước cơ sở dữ liệu Azure SQL.

Nhiều cân nhắc tương tự đối với việc nén dữ liệu cũng áp dụng cho quá trình nén XML. Bạn cũng nên biết những lưu ý sau:

  • Khi danh sách các phân vùng được chỉ định, tính năng nén XML có thể được bật trên các phân vùng riêng lẻ. Nếu danh sách các phân vùng không được chỉ định, tất cả các phân vùng sẽ được thiết lập để sử dụng tính năng nén XML. Khi một bảng hoặc chỉ mục được tạo, tính năng nén dữ liệu XML sẽ bị tắt trừ khi được chỉ định khác. Khi một bảng được sửa đổi, nội dung nén hiện có sẽ được giữ nguyên trừ khi được chỉ định khác.
  • Nếu bạn chỉ định danh sách các phân vùng hoặc phân vùng nằm ngoài phạm vi, thì sẽ xảy ra lỗi.
  • Khi một chỉ mục nhóm được tạo trên một đống, chỉ mục được phân nhóm sẽ kế thừa trạng thái nén XML của đống trừ khi một tùy chọn nén thay thế được chỉ định.
  • Việc thay đổi cài đặt nén XML của một đống yêu cầu phải xây dựng lại tất cả các chỉ mục không phân biệt trên bảng để chúng có con trỏ đến các vị trí hàng mới trong đống.
  • Bạn có thể bật hoặc tắt tính năng nén XML trực tuyến hoặc ngoại tuyến. Bật nén trên một đống là một luồng đơn cho một hoạt động trực tuyến.
  • Để xác định trạng thái nén XML của các phân vùng trong bảng được phân vùng, hãy truy vấn cột xml_compression của chế độ xem danh mục sys.partitions .

Quyền

Yêu cầu quyền ALTER trên bảng hoặc chế độ xem hoặc tư cách thành viên trong vai trò cơ sở dữ liệu cố định db_ddladmin .

Các giới hạn và hạn chế

Trong Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW), bạn không thể tạo:

  • Chỉ mục lưu trữ hàng theo nhóm hoặc không hợp nhất trên bảng kho dữ liệu khi chỉ mục lưu trữ cột đã tồn tại. Hành vi này khác với SMP SQL Server, cho phép cả chỉ mục rowstore và columnstore cùng tồn tại trên cùng một bảng.
  • Bạn không thể tạo chỉ mục trên một chế độ xem.

Siêu dữ liệu

Để xem thông tin về các chỉ mục hiện có, bạn có thể truy vấn chế độ xem danh mục sys.indexes .

Ghi chú phiên bản

Cơ sở dữ liệu SQL không hỗ trợ các tùy chọn nhóm tệp và dòng tệp.

Ví dụ: Tất cả các phiên bản. Sử dụng cơ sở dữ liệu AdventureWorks

A. Tạo chỉ mục lưu trữ hàng không phân biệt đơn giản

Các ví dụ sau tạo chỉ mục không phân biệt trên cột VendorID của bảng Purchasing.ProductVendor .

  TẠO CHỈ SỐ IX_VendorID TRÊN ProductVendor (VendorID);
TẠO INDEX IX_VendorID TRÊN dbo.ProductVendor (VendorID DESC, Name ASC, Address DESC);
TẠO CHỈ SỐ IX_VendorID KHI MUA HÀNG..ProductVendor (VendorID);
 

B. Tạo chỉ mục tổng hợp lưu trữ hàng không phân biệt đơn giản

Ví dụ sau tạo chỉ mục tổng hợp không phân biệt trên cột SalesQuota SalesYTD của bảng Sales.SalesPerson .

  TẠO CHỈ SỐ KHÔNG CHỈNH SỬA IX_SalesPerson_SalesQuota_SalesYTD TRÊN Sales.SalesPerson (SalesQuota, SalesYTD);
 

C. Tạo chỉ mục trên bảng trong cơ sở dữ liệu khác

Ví dụ sau tạo một chỉ mục theo nhóm trên cột VendorID của bảng ProductVendor trong cơ sở dữ liệu Mua hàng .

  TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH IX_ProductVendor_VendorID KHI MUA..ProductVendor (VendorID);
 

D. Thêm cột vào chỉ mục

Ví dụ sau tạo chỉ mục IX_FF với hai cột từ bảng dbo.FactFinance. Câu lệnh tiếp theo xây dựng lại chỉ mục với một cột nữa và giữ nguyên tên hiện có.

  TẠO CHỈ SỐ IX_FF TRÊN dbo.FactFinance (FinanceKey ASC, DateKey ASC);

- Xây dựng lại và thêm OrganizationKey
TẠO INDEX IX_FF TRÊN dbo.FactFinance (FinanceKey, DateKey, OrganizationKey DESC)
  VỚI (DROP_EXISTING = BẬT);
 

Ví dụ: SQL Server, Azure SQL Database

E. Tạo một chỉ mục không hợp nhất duy nhất

Ví dụ sau tạo một chỉ mục không gộp duy nhất trên cột Name của bảng Production.UnitMeasure trong cơ sở dữ liệu AdventureWorks2012 . Chỉ mục sẽ thực thi tính duy nhất trên dữ liệu được chèn vào cột Tên .

  TẠO CHỈ SỐ DUY NHẤT AK_UnitMeasure_Name
  ON Production.UnitMeasure (Tên);
 

Truy vấn sau đây kiểm tra ràng buộc về tính duy nhất bằng cách cố gắng chèn một hàng có cùng giá trị với giá trị đó trong một hàng hiện có.

  - Xác minh giá trị hiện có.
CHỌN Tên TỪ Production.UnitMeasure WHERE Name = N'Ounces ';
ĐI

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
  VALUES ('OC', 'Ounce', GETDATE ());
 

Thông báo lỗi kết quả là:

  Máy chủ: Msg 2601, Cấp 14, Trạng thái 1, Dòng 1
Không thể chèn hàng khóa trùng lặp trong đối tượng 'UnitMeasure' có chỉ mục duy nhất 'AK_UnitMeasure_Name'. Các tuyên bố này đã bị chấm dứt.
 

F. Sử dụng tùy chọn IGNORE_DUP_KEY

Ví dụ sau thể hiện tác dụng của tùy chọn IGNORE_DUP_KEY bằng cách chèn nhiều hàng vào bảng tạm thời trước tiên với tùy chọn được đặt thành ON và một lần nữa với tùy chọn được đặt thành < mã> TẮT . Một hàng đơn lẻ được chèn vào bảng #Test sẽ cố ý gây ra giá trị trùng lặp khi câu lệnh INSERT nhiều hàng thứ hai được thực thi. Số hàng trong bảng trả về số hàng được chèn.

  TẠO BẢNG #Test (C1 NVARCHAR (10), C2 NVARCHAR (50), C3 DATETIME);
ĐI

TẠO CHỈ SỐ DUY NHẤT AK_Index TRÊN #Test (C2)
  VỚI (IGNORE_DUP_KEY = ON);
ĐI

CHÈN VÀO CÁC GIÁ TRỊ #Test (N'OC ', N'Ounces', GETDATE ());
CHÈN VÀO #Test CHỌN * TỪ Production.UnitMeasure;
ĐI

CHỌN ĐẾM (*) NHƯ [Số hàng] TỪ #Test;
ĐI

DROP BẢNG #Test;
ĐI
 

Đây là kết quả của câu lệnh INSERT thứ hai.

  Máy chủ: Msg 3604, Mức 16, Trạng thái 1, Dòng 5 Khóa trùng lặp đã bị bỏ qua.

Số hàng
--------------
38
 

Lưu ý rằng các hàng được chèn từ bảng Production.UnitMeasure không vi phạm giới hạn tính duy nhất đã được chèn thành công. Một cảnh báo đã được đưa ra và hàng trùng lặp bị bỏ qua, nhưng toàn bộ giao dịch không được khôi phục.

Các câu lệnh tương tự được thực thi lại nhưng với IGNORE_DUP_KEY được đặt thành OFF .

  TẠO BẢNG #Test (C1 NVARCHAR (10), C2 NVARCHAR (50), C3 DATETIME);
ĐI

TẠO CHỈ SỐ DUY NHẤT AK_Index TRÊN #Test (C2)
  VỚI (IGNORE_DUP_KEY = TẮT);
ĐI

CHÈN VÀO CÁC GIÁ TRỊ #Test (N'OC ', N'Ounces', GETDATE ());
CHÈN VÀO #Test CHỌN * TỪ Production.UnitMeasure;
ĐI

CHỌN ĐẾM (*) NHƯ [Số hàng] TỪ #Test;
ĐI

DROP BẢNG #Test;
ĐI
 

Đây là kết quả của câu lệnh INSERT thứ hai.

  Máy chủ: Msg 2601, Cấp 14, Trạng thái 1, Dòng 5
Không thể chèn hàng khóa trùng lặp trong đối tượng '#Test' với chỉ mục duy nhất
'AK_Index'. Các tuyên bố này đã bị chấm dứt.

Số hàng
--------------
1
 

Lưu ý rằng không có hàng nào từ bảng Production.UnitMeasure được chèn vào bảng mặc dù chỉ một hàng trong bảng vi phạm ràng buộc chỉ mục UNIQUE .

G. Sử dụng DROP_EXISTING để thả và tạo lại chỉ mục

Ví dụ sau loại bỏ và tạo lại chỉ mục hiện có trên cột ProductID của bảng Production.WorkOrder trong cơ sở dữ liệu AdventureWorks2012 bằng cách bằng cách sử dụng tùy chọn DROP_EXISTING . Các tùy chọn FILLFACTOR PAD_INDEX cũng được đặt.

  TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH IX_WorkOrder_ProductID
  ON Production.WorkOrder (ProductID)
    VỚI (FILLFACTOR = 80,
      PAD_INDEX = BẬT,
      DROP_EXISTING = BẬT);
ĐI
 

H. Tạo chỉ mục trên một chế độ xem

Ví dụ sau đây tạo một chế độ xem và một chỉ mục trên chế độ xem đó. Hai truy vấn được đưa vào sử dụng chế độ xem đã lập chỉ mục.

 - Đặt các tùy chọn để hỗ trợ các chế độ xem được lập chỉ mục
TẮT NUMERIC_ROUNDABORT TẮT;
ĐẶT ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
  QUOTED_IDENTIFIER, ANSI_NULLS ON;
ĐI

- Tạo chế độ xem với schemabinding
NẾU OBJECT_ID ('Sales.vOrders', 'view') KHÔNG ĐẦY ĐỦ
  DROP XEM Bán hàng.vOrders;
ĐI

TẠO XEM Bán hàng.vOrders
  VỚI SCHEMABINDING
BẰNG 
  CHỌN SUM (UnitPrice * OrderQty * (1.00 - UnitPriceDiscount)) AS Doanh thu,
    OrderDate, ProductID, COUNT_BIG (*) AS COUNT
  TỪ Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o
  WHERE od.SalesOrderID = o.SalesOrderID
  GROUP BY OrderDate, ProductID;
ĐI

- Tạo chỉ mục trên khung nhìn
TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH DUY NHẤT IDX_V1
  ON Sales.vOrders (Ngày đặt hàng, ProductID);
ĐI

- Truy vấn này có thể sử dụng dạng xem được lập chỉ mục mặc dù dạng xem là
- không được chỉ định trong mệnh đề FROM.
CHỌN SUM (UnitPrice * OrderQty * (1.00 - UnitPriceDiscount)) AS Rev,
  OrderDate, ProductID
TỪ Sales.SalesOrderDetail AS od
  THAM GIA Sales.SalesOrderHeader AS o ON od.SalesOrderID = o.SalesOrderID
    VÀ ProductID GIỮA 700 VÀ 800
    AND OrderDate & gt; = CONVERT (DATETIME, '05 / 01/2002 ', 101)
NHÓM THEO Ngày đặt hàng, ID sản phẩm
ĐẶT HÀNG BẰNG Rev DESC;
ĐI

- Truy vấn này có thể sử dụng chế độ xem đã lập chỉ mục ở trên
SELECT OrderDate, SUM (UnitPrice * OrderQty * (1.00 - UnitPriceDiscount)) AS Rev
TỪ Sales.SalesOrderDetail AS od
  THAM GIA Sales.SalesOrderHeader AS o ON od.SalesOrderID = o.SalesOrderID
    AND DATEPART (mm, OrderDate) = 3
  AND DATEPART (yy, OrderDate) = 2002
NHÓM THEO Thứ tự Ngày
ĐẶT HÀNG THEO Thứ tự Ngày ASC;
ĐI
 

Tôi. Tạo chỉ mục với các cột (không phải khóa) được bao gồm

Ví dụ sau tạo chỉ mục không phân biệt với một cột khóa ( Mã bưu điện ) và bốn cột không khóa ( AddressLine1 , AddressLine2 , < mã> Thành phố , StateProvinceID ). Sau đây là một truy vấn được bao hàm bởi chỉ mục. Để hiển thị chỉ mục được chọn bởi trình tối ưu hóa truy vấn, trên menu Truy vấn trong SQL Server Management Studio, hãy chọn Hiển thị kế hoạch thực thi thực tế trước khi thực hiện truy vấn.

  TẠO CHỈ SỐ KHÔNG ĐIỀU CHỈNH IX_Address_PostalCode
  ON Person.Address (Mã bưu điện)
  BAO GỒM (AddressLine1, AddressLine2, City, StateProvinceID);
ĐI

CHỌN AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
TỪ Person.Address
NƠI Mã Bưu Điện GIỮA N'98000 'và N'99999';
ĐI
 

J. Tạo chỉ mục được phân vùng

Ví dụ sau đây tạo chỉ mục được phân vùng không hợp nhất trên TransactionsPS1 , một lược đồ phân vùng hiện có trong cơ sở dữ liệu AdventureWorks2012 . Ví dụ này giả định rằng mẫu chỉ mục phân vùng đã được cài đặt.

  TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH IX_TransactionHistory_ReferenceOrderID
  ON Production.TransactionHistory (ReferenceOrderID)
  ON Giao dịchPS1 (Ngày giao dịch);
ĐI
 

K. Tạo chỉ mục được lọc

Ví dụ sau tạo một chỉ mục được lọc trên bảng Production.BillOfMaterials trong cơ sở dữ liệu AdventureWorks2012 . Vị từ bộ lọc có thể bao gồm các cột không phải là cột chính trong chỉ mục được lọc. Vị từ trong ví dụ này chỉ chọn các hàng có Ngày kết thúc không phải là NULL.

  TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH "FIBillOfMaterialsWithEndDate"
  ON Production.BillOfMaterials (ComponentID, StartDate)
  ĐÂU EndDate KHÔNG ĐẦY ĐỦ;
 

L. Tạo chỉ mục nén

Ví dụ sau đây tạo chỉ mục trên bảng không có phân vùng bằng cách sử dụng tính năng nén hàng.

  TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH IX_INDEX_1
  BẬT T1 (C2)
  VỚI (DATA_COMPRESSION = ROW);
ĐI
 

Ví dụ sau đây tạo một chỉ mục trên một bảng được phân vùng bằng cách sử dụng tính năng nén hàng trên tất cả các phân vùng của chỉ mục.

  TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH IX_PartTab2Col1
  ON PartitionTable1 (Col1)
  VỚI (DATA_COMPRESSION = ROW);
ĐI
 

Ví dụ sau tạo chỉ mục trên bảng được phân vùng bằng cách sử dụng tính năng nén trang trên phân vùng 1 của chỉ mục và nén hàng trên các phân vùng 2 đến 4 của chỉ mục.

  TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH IX_PartTab2Col1
  ON PartitionTable1 (Col1)
  VỚI (
    DATA_COMPRESSION = TRANG TRÊN CÁC PHẦN (1),
    DATA_COMPRESSION = ROW TRÊN CÁC PHẦN (2 ĐẾN 4)
  );
ĐI
 

M. Tạo chỉ mục bằng nén XML

Áp dụng cho : Bản xem trước SQL Server 2022 (16.x) trở lên và Bản xem trước cơ sở dữ liệu Azure SQL.

Ví dụ sau đây tạo một chỉ mục trên một bảng không có phân vùng bằng cách sử dụng nén XML. Ít nhất một cột trong chỉ mục phải là kiểu dữ liệu xml .

 TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH IX_INDEX_1
  BẬT T1 (C2)
  WITH (XML_COMPRESSION = ON);
ĐI
 

Ví dụ sau đây tạo một chỉ mục trên một bảng được phân vùng bằng cách sử dụng tính năng nén XML trên tất cả các phân vùng của chỉ mục.

  TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH IX_PartTab2Col1
  ON PartitionTable1 (Col1)
  WITH (XML_COMPRESSION = ON);
ĐI
 

N. Tạo, tiếp tục, tạm dừng và hủy bỏ các hoạt động chỉ mục có thể tiếp tục

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

  - Thực thi câu lệnh tạo chỉ mục trực tuyến có thể tiếp tục với MAXDOP = 1
TẠO CHỈ SỐ test_idx1 TRÊN test_table (col1) VỚI (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);

- Thực hiện lại lệnh tương tự (xem ở trên) sau khi tạm dừng thao tác lập chỉ mục, tự động tiếp tục thao tác tạo chỉ mục.

- Thực thi hoạt động tạo chỉ mục trực tuyến có thể tiếp tục với MAX_DURATION được đặt thành 240 phút. Sau khi hết thời gian, hoạt động tạo chỉ mục có thể tiếp tục sẽ bị tạm dừng.
TẠO CHỈ SỐ test_idx2 TRÊN test_table (col2) VỚI (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);

- Tạm dừng quá trình tạo chỉ mục trực tuyến có thể tiếp tục lại đang chạy
ALTER INDEX test_idx1 ON test_table PAUSE;
ALTER INDEX test_idx2 ON test_table PAUSE;

- Tiếp tục tạo chỉ mục trực tuyến bị tạm dừng
ALTER INDEX test_idx1 TRÊN KẾT QUẢ CỦA test_table;
ALTER INDEX test_idx2 TRÊN KẾT QUẢ test_table;

- Hủy bỏ hoạt động tạo chỉ mục có thể tiếp tục đang chạy hoặc bị tạm dừng
ALTER INDEX test_idx1 ON test_table ABORT;
ALTER INDEX test_idx2 ON test_table ABORT;
 

O. TẠO CHỈ SỐ với các tùy chọn khóa có mức độ ưu tiên thấp khác nhau

Các ví dụ sau sử dụng tùy chọn WAIT_AT_LOW_PRIORITY để chỉ định các chiến lược khác nhau để đối phó với việc chặn.

  - Kết thúc phiên này sau khi đợi 5 phút
TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH idx_1 TRÊN dbo.T2 (a) WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = SELF)));
ĐI
 
  - Hủy phiên trình chặn
TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH idx_1 TRÊN dbo.T2 (a) WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = BLOCKERS)));
ĐI
 

Ví dụ sau sử dụng cả tùy chọn RESUMABLE và chỉ định hai giá trị MAX_DURATION , giá trị đầu tiên áp dụng cho tùy chọn ABORT_AFTER_WAIT , giá trị thứ hai áp dụng cho tùy chọn RESUMABLE .

  - Với tùy chọn có thể tiếp tục; hành vi khóa mặc định
TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH idx_1 TRÊN dbo.T2 (a) VỚI (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = NONE)), RESUMABLE = ON, MAX_DURATION = 240 MINUTES);
 

Ví dụ: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

P. Cú pháp cơ bản

Tạo, tiếp tục, tạm dừng và hủy bỏ các hoạt động lập chỉ mục có thể tiếp tục

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)) và Cơ sở dữ liệu Azure SQL

  - Thực thi câu lệnh tạo chỉ mục trực tuyến có thể tiếp tục với MAXDOP = 1
TẠO CHỈ SỐ test_idx TRÊN test_table VỚI (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);

- Thực hiện lại lệnh tương tự (xem ở trên) sau khi tạm dừng thao tác lập chỉ mục, tự động tiếp tục thao tác tạo chỉ mục.

- Thực thi hoạt động tạo chỉ mục trực tuyến có thể tiếp tục với MAX_DURATION được đặt thành 240 phút. Sau khi hết thời gian, hoạt động tạo chỉ mục có thể tiếp tục sẽ bị tạm dừng.
TẠO CHỈ SỐ test_idx TRÊN test_table VỚI (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);

- Tạm dừng quá trình tạo chỉ mục trực tuyến có thể tiếp tục lại đang chạy
ALTER INDEX test_idx ON test_table PAUSE;

- Tiếp tục tạo chỉ mục trực tuyến bị tạm dừng
ALTER INDEX test_idx TRÊN KẾT QUẢ test_table;

- Hủy bỏ hoạt động tạo chỉ mục có thể tiếp tục đang chạy hoặc bị tạm dừng
ALTER INDEX test_idx ON test_table ABORT;
 

Hỏi. Tạo chỉ mục không hợp nhất trên bảng trong cơ sở dữ liệu hiện tại

Ví dụ sau tạo chỉ mục không phân biệt trên cột VendorID của bảng ProductVendor .

  TẠO CHỈ SỐ IX_ProductVendor_VendorID
  TRÊN ProductVendor (VendorID);
 

R. Tạo chỉ mục nhóm trên một bảng trong cơ sở dữ liệu khác

Ví dụ sau tạo chỉ mục không phân biệt trên cột VendorID của bảng ProductVendor trong cơ sở dữ liệu Mua hàng .

  TẠO CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH IX_ProductVendor_VendorID
  BẬT Mua hàng..ProductVendor (VendorID);
 

S. Tạo chỉ mục nhóm có thứ tự trên bảng

Ví dụ sau tạo một chỉ mục được phân cụm có thứ tự trên cột c1 c2 của bảng T1 trong MyDB cơ sở dữ liệu.

  TẠO CHỈ SỐ COLUMNSTORE ĐƯỢC ĐÓNG CỬA VÀO MyOrderedCCI TRÊN MyDB.dbo.T1
LỆNH (c1, c2);
 

T. Chuyển đổi CCI thành chỉ mục được phân nhóm có thứ tự trên bảng

< code> bảng T2 trong cơ sở dữ liệu MyDB .

  TẠO CHỈ SỐ COLUMNSTORE ĐƯỢC ĐÓNG CỬA VÀO MyOrderedCCI TRÊN MyDB.dbo.T2
ĐẶT HÀNG (c1, c2)
VỚI (DROP_EXISTING = BẬT);
 

Xem thêm


Xem thêm những thông tin liên quan đến chủ đề tạo chỉ mục máy chủ sql

Ways to create column store Index in sql server

  • Tác giả: Sql Is Easy
  • Ngày đăng: 2017-10-26
  • Đánh giá: 4 ⭐ ( 8500 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CREATE NONCLUSTERED COLUMNSTORE INDEX [NonClusteredColumnStoreIndex-20171027-091656] ON [dbo].[DemoNew]
    (
    [Id],
    [Name]
    )

    GO

[Thực hành] Chỉ mục trong MySql- Codegym.vn

  • Tác giả: codegym.vn
  • Đánh giá: 4 ⭐ ( 8733 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chỉ mục trong MySql. Hãy xem xét ví dụ sau để tìm hiểu và so sánh về tốc độ khi đánh index cho cách trườngHướng dẫn nộp bài:Up mã nguồn lên github

Chỉ số máy chủ SQL so với thống kê

  • Tác giả: qastack.vn
  • Đánh giá: 4 ⭐ ( 9195 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Chỉ mục lưu trữ dữ liệu thực tế (trang dữ liệu hoặc trang chỉ mục tùy…

[PostgreSQL] Tạo và quản lý chỉ mục / PostgreSQL Indexes

  • Tác giả: vinasupport.com
  • Đánh giá: 5 ⭐ ( 5367 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: PostgreSQL Tutorial: Hướng dẫn tạo, xóa và quản lý chỉ mục / Indexes trong PostgreSQL. Các chỉ mục (Indexes) là gì? là các bảng tra cứu đặc biệt mà công cụ tìm kiếm dữ liệu (database search engine) sử dụng để tăng tốc độ truy xuất dữ liệu

Lập chỉ mục cho hiệu suất cao trong SQL

  • Tác giả: itzone.com.vn
  • Đánh giá: 3 ⭐ ( 4395 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The ITZone platform Vietnam is the community for anyone interested in news, training seminars, presentations etc in the IT industry

Tạo thư mục thực hành SQL trên máy tính của bạn

  • Tác giả: hoctinonline.edu.vn
  • Đánh giá: 5 ⭐ ( 7614 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Chỉ mục (INDEX) trong SQL

  • Tác giả: nq.com.vn
  • Đánh giá: 5 ⭐ ( 9881 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php