Các đề xuất và ví dụ về lập chỉ mục các bảng trong nhóm SQL chuyên dụng.

Bạn đang xem : lập chỉ mục bảng trong sql

Chỉ mục trên các bảng nhóm SQL chuyên dụng trong Azure Synapse Analytics

Trong bài viết này

Các đề xuất và ví dụ về lập chỉ mục các bảng trong nhóm SQL chuyên dụng trong Azure Synapse Analytics.

Loại chỉ mục

Nhóm SQL chuyên dụng cung cấp một số tùy chọn lập chỉ mục bao gồm các chỉ mục cột được phân cụm , chỉ mục được phân nhóm và chỉ mục không được phân loại và tùy chọn không lập chỉ mục còn được gọi là heap .

Để tạo bảng có chỉ mục, hãy xem tài liệu TẠO BẢNG (nhóm SQL chuyên dụng) .

Chỉ mục columnstore theo cụm

Theo mặc định, nhóm SQL chuyên dụng tạo chỉ mục cột lưu trữ theo cụm khi không có tùy chọn chỉ mục nào được chỉ định trên bảng. Các bảng cột lưu trữ được phân cụm cung cấp cả mức nén dữ liệu cao nhất và hiệu suất truy vấn tổng thể tốt nhất. Các bảng dạng cột được phân cụm nhìn chung sẽ hoạt động tốt hơn bảng chỉ mục hoặc bảng đống được phân cụm và thường là lựa chọn tốt nhất cho các bảng lớn. Vì những lý do này, Columnstore theo cụm là nơi tốt nhất để bắt đầu khi bạn không chắc về cách lập chỉ mục bảng của mình.

Để tạo một bảng columnstore theo cụm, chỉ cần chỉ định CLUSTERED COLUMNSTORE INDEX trong mệnh đề WITH hoặc tắt mệnh đề WITH:

  TẠO BẢNG myTable
  (
    id int NOT NULL,
    lastName varchar (20),
    zipCode varchar (6)
  )
VỚI (CHỈ SỐ COLUMNSTORE ĐƯỢC ĐIỀU CHỈNH);
 

Có một số trường hợp trong đó nhà hàng cột theo cụm có thể không phải là một lựa chọn tốt:

  • Bảng Columnstore không hỗ trợ varchar (max), nvarchar (max) và varbinary (max). Thay vào đó, hãy xem xét chỉ mục theo nhóm hoặc theo nhóm.
  • Các bảng Columnstore có thể kém hiệu quả hơn đối với dữ liệu tạm thời. Hãy xem xét đống và thậm chí có thể là bảng tạm thời.
  • Bảng nhỏ có ít hơn 60 triệu hàng. Xem xét bảng đống.

Bảng đống

Khi bạn đang tạm thời hạ cánh dữ liệu trong nhóm SQL chuyên dụng, bạn có thể thấy rằng việc sử dụng bảng heap làm cho quá trình tổng thể nhanh hơn. Điều này là do tải lên đống nhanh hơn so với bảng chỉ mục và trong một số trường hợp, việc đọc tiếp theo có thể được thực hiện từ bộ nhớ cache. Nếu bạn chỉ tải dữ liệu để phân đoạn trước khi chạy nhiều phép biến đổi hơn, thì việc tải bảng vào bảng heap sẽ nhanh hơn nhiều so với tải dữ liệu vào một bảng cột trong cụm. Ngoài ra, tải dữ liệu vào bảng tạm thời sẽ tải nhanh hơn so với tải một bảng vào bộ nhớ vĩnh viễn. Sau khi tải dữ liệu, bạn có thể tạo các chỉ mục trong bảng để có hiệu suất truy vấn nhanh hơn.

Bảng lưu trữ cột trong cụm bắt đầu đạt được độ nén tối ưu khi có hơn 60 triệu hàng. Đối với các bảng tra cứu nhỏ, dưới 60 triệu hàng, hãy cân nhắc sử dụng HEAP hoặc chỉ mục theo nhóm để có hiệu suất truy vấn nhanh hơn.

Để tạo bảng heap, chỉ cần chỉ định HEAP trong mệnh đề WITH:

  TẠO BẢNG myTable
  (
    id int NOT NULL,
    lastName varchar (20),
    zipCode varchar (6)
  )
VỚI (HEAP);
 

Chỉ mục được phân nhóm và không được phân nhóm

Các chỉ mục được phân nhóm có thể hoạt động tốt hơn các bảng lưu trữ cột theo nhóm khi một hàng đơn lẻ cần được truy xuất nhanh chóng. Đối với các truy vấn yêu cầu một hoặc rất ít tra cứu hàng để thực hiện với tốc độ cực cao, hãy xem xét chỉ mục nhóm hoặc chỉ mục phụ không phân biệt. Điểm bất lợi khi sử dụng chỉ mục được phân nhóm là chỉ những truy vấn có lợi mới là những truy vấn sử dụng bộ lọc có tính chọn lọc cao trên cột chỉ mục được phân nhóm. Để cải thiện bộ lọc trên các cột khác, có thể thêm chỉ mục không phân biệt vào các cột khác. Tuy nhiên, mỗi chỉ mục được thêm vào bảng sẽ thêm cả không gian và thời gian xử lý để tải.

Để tạo một bảng chỉ mục được phân nhóm, chỉ cần chỉ định CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH trong mệnh đề VỚI:

  TẠO BẢNG myTable
  (
    id int NOT NULL,
    lastName varchar (20),
    zipCode varchar (6)
  )
VỚI (CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH (id));
 

Để thêm chỉ mục không phân cụm trên bảng, hãy sử dụng cú pháp sau:

  TẠO CHỈ SỐ zipCodeIndex TRÊN myTable (zipCode);
 

Tối ưu hóa chỉ mục columnstore được phân cụm

Các bảng cột lưu trữ được phân cụm tổ chức dữ liệu thành các phân đoạn. Có chất lượng phân đoạn cao là rất quan trọng để đạt được hiệu suất truy vấn tối ưu trên bảng cột cửa hàng. Chất lượng phân đoạn có thể được đo lường bằng số lượng hàng trong một nhóm hàng được nén. Chất lượng phân đoạn là tối ưu nhất khi có ít nhất 100 K hàng trên mỗi nhóm hàng được nén và đạt được hiệu suất khi số hàng trên mỗi nhóm hàng đạt tới 1.048.576 hàng, đây là số hàng nhiều nhất mà một nhóm hàng có thể chứa.

Chế độ xem bên dưới có thể được tạo và sử dụng trên hệ thống của bạn để tính toán các hàng trung bình cho mỗi nhóm hàng và xác định bất kỳ chỉ mục cột cửa hàng nào của cụm tối ưu nhất. Cột cuối cùng trên dạng xem này tạo một câu lệnh SQL có thể được sử dụng để xây dựng lại các chỉ mục của bạn.

  TẠO CHẾ ĐỘ XEM dbo.vColumnstoreDensity
BẰNG 
LỰA CHỌN
        GETDATE () AS [ngày_thực hiện]
, DB_Name () AS [database_name]
, s.name AS [schema_name]
, t.name AS [tên_bảng]
, COUNT (DISTINCT rg. [Partition_number]) AS [table_partition_count]
, SUM (rg. [Total_rows]) AS [row_count_total]
, SUM (rg. [Total_rows]) / COUNT (DISTINCT rg. [Distribution_id]) AS [row_count_per_distribution_MAX]
, CEILING ((SUM (rg. [Total_rows]) * 1.0 / COUNT (DISTINCT rg. [Distribution_id])) / 1048576) AS [rowgroup_per_distribution_MAX]
, SUM (CASE WHEN rg. [State] = 0 THEN 1 ELSE 0 END) AS [INVISIBLE_rowgroup_count]
, SUM (CASE WHEN rg. [State] = 0 THEN rg. [Total_rows] ELSE 0 END) NHƯ [INVISIBLE_rowgroup_rows]
, MIN (CASE WHEN rg. [State] = 0 THEN rg. [Total_rows] ELSE NULL END) NHƯ [INVISIBLE_rowgroup_rows_MIN]
, MAX (CASE WHEN rg. [State] = 0 THEN rg. [Total_rows] ELSE NULL END) NHƯ [INVISIBLE_rowgroup_rows_MAX]
, AVG (CASE WHEN rg. [State] = 0 THEN rg. [Total_rows] ELSE NULL END) NHƯ [INVISIBLE_rowgroup_rows_AVG]
, SUM (CASE WHEN rg. [State] = 1 THEN 1 ELSE 0 END) AS [OPEN_rowgroup_count]
, SUM (CASE WHEN rg. [State] = 1 THEN rg. [Total_rows] ELSE 0 END) NHƯ [OPEN_rowgroup_rows]
, MIN (CASE WHEN rg. [State] = 1 THEN rg. [Total_rows] ELSE NULL END) NHƯ [OPEN_rowgroup_rows_MIN]
, MAX (CASE WHEN rg. [State] = 1 THEN rg. [Total_rows] ELSE NULL END) NHƯ [OPEN_rowgroup_rows_MAX]
, AVG (CASE WHEN rg. [State] = 1 THEN rg. [Total_rows] ELSE NULL END) AS [OPEN_rowgroup_rows_AVG]
, SUM (CASE WHEN rg. [State] = 2 THEN 1 ELSE 0 END) AS [CLOSED_rowgroup_count]
, SUM (CASE WHEN rg. [State] = 2 THEN rg. [Total_rows] ELSE 0 END) NHƯ [CLOSED_rowgroup_rows]
, MIN (CASE WHEN rg. [State] = 2 THEN rg. [Total_rows] ELSE NULL END) NHƯ [CLOSED_rowgroup_rows_MIN]
, MAX (CASE WHEN rg. [State] = 2 THEN rg. [Total_rows] ELSE NULL END) NHƯ [CLOSED_rowgroup_rows_MAX]
, AVG (CASE WHEN rg. [State] = 2 THEN rg. [Total_rows] ELSE NULL END) NHƯ [CLOSED_rowgroup_rows_AVG]
, SUM (CASE WHEN rg. [State] = 3 THEN 1 ELSE 0 END) AS [COMPRESSED_rowgroup_count]
, SUM (CASE WHEN rg. [State] = 3 THEN rg. [Total_rows] ELSE 0 END) NHƯ [COMPRESSED_rowgroup_rows]
, SUM (CASE WHEN rg. [State] = 3 THEN rg. [Delete_rows] ELSE 0 END) NHƯ [COMPRESSED_rowgroup_rows_DELETED]
, MIN (CASE WHEN rg. [State] = 3 THEN rg. [Total_rows] ELSE NULL END) NHƯ [COMPRESSED_rowgroup_rows_MIN]
, MAX (CASE WHEN rg. [State] = 3 THEN rg. [Total_rows] ELSE NULL END) NHƯ [COMPRESSED_rowgroup_rows_MAX]
, AVG (CASE WHEN rg. [State] = 3 THEN rg. [Total_rows] ELSE NULL END) NHƯ [COMPRESSED_rowgroup_rows_AVG]
, 'ALTER INDEX ALL ON' + s.name + '.' + t.NAME + 'REBUILD;' AS [Rebuild_Index_SQL]
FROM sys. [Pdw_nodes_column_store_row_groups] rg
THAM GIA hệ thống. [Pdw_nodes_tables] nt ON rg. [Object_id] = nt. [Object_id]
                                                    VÀ rg. [Pdw_node_id] = nt. [Pdw_node_id]
                                                    AND rg. [Distribution_id] = nt. [Distribution_id]
THAM GIA hệ thống. [Pdw_table_mappings] mp BẬT nt. [Name] = mp. [Physical_name]
THAM GIA hệ thống. [Bảng] t BẬT mp. [Object_id] = t. [Object_id]
THAM GIA hệ thống. [Schemas] s BẬT t. [Schema_id] = s. [Schema_id]
NHÓM THEO
        tên của]
, t. [tên];
 

Bây giờ bạn đã tạo chế độ xem, hãy chạy truy vấn này để xác định các bảng có nhóm hàng có ít hơn 100 K hàng. Bạn có thể muốn tăng ngưỡng 100 K nếu bạn đang tìm kiếm chất lượng phân khúc tối ưu hơn.

  CHỌN *
TỪ [dbo]. [VColumnstoreDensity]
NƠI COMPRESSED_rowgroup_rows_AVG & lt; 100000
        HOẶC INVISIBLE_rowgroup_rows_AVG & lt; 100000;
 

Khi bạn đã chạy truy vấn, bạn có thể bắt đầu xem dữ liệu và phân tích kết quả của mình. Bảng này giải thích những gì cần tìm trong phân tích nhóm hàng của bạn.

Xem Thêm  Các cách viết mã PHP khác nhau - làm thế nào để viết một tập lệnh php

Cột
Cách sử dụng dữ liệu này

[table_partition_count]
Nếu bảng được phân vùng, thì bạn có thể thấy số lượng nhóm hàng Mở cao hơn. Mỗi phân vùng trong bản phân phối về lý thuyết có thể có một nhóm hàng mở được liên kết với nó. Đưa điều này vào phân tích của bạn. Một bảng nhỏ đã được phân vùng có thể được tối ưu hóa bằng cách xóa phân vùng hoàn toàn vì điều này sẽ cải thiện khả năng nén.

[row_count_total]
Tổng số hàng cho bảng. Ví dụ: bạn có thể sử dụng giá trị này để tính toán phần trăm hàng ở trạng thái nén.

[row_count_per_distribution_MAX]
Nếu tất cả các hàng được phân phối đồng đều, giá trị này sẽ là số hàng mục tiêu trên mỗi lần phân phối. So sánh giá trị này với số lượng_nhóm_mã nén.

[COMPRESSED_rowgroup_rows]
Tổng số hàng ở định dạng cột lưu trữ cho bảng.

[COMPRESSED_rowgroup_rows_AVG]
Nếu số hàng trung bình ít hơn đáng kể so với số hàng tối đa cho một nhóm hàng, thì hãy xem xét sử dụng CTAS hoặc ALTER INDEX REBUILD để nén lại dữ liệu

[COMPRESSED_rowgroup_count]
Số lượng nhóm hàng ở định dạng cột lưu trữ. Nếu con số này rất cao so với bảng, thì đó là một chỉ báo cho thấy mật độ cửa hàng cột thấp.

[COMPRESSED_rowgroup_rows_DELETED]
Các hàng được xóa một cách hợp lý ở định dạng columnstore. Nếu số lượng cao so với kích thước bảng, hãy xem xét tạo lại phân vùng hoặc xây dựng lại chỉ mục vì điều này loại bỏ chúng về mặt vật lý.

[COMPRESSED_rowgroup_rows_MIN]
Sử dụng điều này với các cột AVG và MAX để hiểu phạm vi giá trị cho các nhóm hàng trong cột của bạn. Một con số thấp trên ngưỡng tải (102.400 cho mỗi phân phối được căn chỉnh theo phân vùng) cho thấy rằng các tối ưu hóa có sẵn trong tải dữ liệu

[COMPRESSED_rowgroup_rows_MAX]
Như trên

[OPEN_rowgroup_count]
Nhóm hàng mở là bình thường. Người ta sẽ mong đợi một cách hợp lý một nhóm hàng MỞ trên mỗi bảng phân phối (60). Số lượng quá nhiều gợi ý tải dữ liệu qua các phân vùng. Kiểm tra kỹ chiến lược phân vùng để đảm bảo rằng chiến lược đó phù hợp

[OPEN_rowgroup_rows]
Mỗi nhóm hàng có thể có tối đa 1.048.576 hàng trong đó. Sử dụng giá trị này để xem các nhóm hàng đang mở hiện đang đầy như thế nào

[OPEN_rowgroup_rows_MIN]
Các nhóm mở cho biết rằng dữ liệu đang được tải nhỏ giọt vào bảng hoặc tải trước đó tràn qua các hàng còn lại vào nhóm hàng này. Sử dụng các cột MIN, MAX, AVG để xem có bao nhiêu dữ liệu được sử dụng trong các nhóm hàng OPEN. Đối với các bảng nhỏ, nó có thể là 100% của tất cả dữ liệu! Trong trường hợp đó ALTER INDEX REBUILD để buộc dữ liệu vào cột lưu trữ.

[OPEN_rowgroup_rows_MAX]
Như trên

[OPEN_rowgroup_rows_AVG]
Như trên

[CLOSED_rowgroup_rows]
Nhìn vào các hàng nhóm hàng đã đóng cửa như một sự kiểm tra sự tỉnh táo.

[CLOSED_rowgroup_count]
Số lượng nhóm hàng đã đóng phải thấp nếu có bất kỳ nhóm nào được nhìn thấy. Nhóm hàng đã đóng có thể được chuyển đổi thành nhóm hàng được nén bằng lệnh ALTER INDEX … REORGANIZE. Tuy nhiên, điều này thường không được yêu cầu. Các nhóm đã đóng được tự động chuyển đổi thành các nhóm hàng trong cột bằng quy trình “tuple mover” trong nền.

[CLOSED_rowgroup_rows_MIN]
Các nhóm hàng đã đóng nên có tỷ lệ lấp đầy rất cao. Nếu tỷ lệ lấp đầy cho một nhóm hàng kín thấp, thì cần phải phân tích thêm về cột cột.

[CLOSED_rowgroup_rows_MAX]
Như trên

[CLOSED_rowgroup_rows_AVG]
Như trên

[Rebuild_Index_SQL]
SQL để xây dựng lại chỉ mục columnstore cho một bảng

Tác động của việc duy trì chỉ mục

Cột Rebuild_Index_SQL trong chế độ xem vColumnstoreDensity chứa câu lệnh ALTER INDEX REBUILD có thể được sử dụng để xây dựng lại các chỉ mục của bạn. Khi xây dựng lại chỉ mục của bạn, hãy đảm bảo rằng bạn phân bổ đủ bộ nhớ cho phiên xây dựng lại chỉ mục của bạn. Để thực hiện việc này, hãy tăng lớp tài nguyên của người dùng có quyền xây dựng lại chỉ mục trên bảng này lên mức tối thiểu được đề xuất. Ví dụ: xem phần Xây dựng lại chỉ mục để cải thiện chất lượng phân khúc ở phần sau của bài viết này.

Xem Thêm  Cách đọc tệp văn bản bằng Python (Python mở) • datagy - python đọc tệp txt

Đối với một bảng có chỉ mục cột lưu trữ được phân cụm theo thứ tự, ALTER INDEX REBUILD sẽ sắp xếp lại dữ liệu bằng cách sử dụng tempdb. Theo dõi tempdb trong quá trình xây dựng lại hoạt động. Nếu bạn cần thêm dung lượng tempdb, hãy mở rộng nhóm cơ sở dữ liệu. Thu nhỏ quy mô lại sau khi quá trình xây dựng lại chỉ mục hoàn tất.

Đối với một bảng có chỉ mục cột lưu trữ theo nhóm được sắp xếp theo thứ tự, ALTER INDEX REORGANIZE không sắp xếp lại dữ liệu. Để sắp xếp lại dữ liệu, hãy sử dụng ALTER INDEX REBUILD .

Để biết thêm thông tin về chỉ mục cửa hàng cột theo nhóm được sắp xếp theo thứ tự, hãy xem Điều chỉnh hiệu suất với chỉ mục cửa hàng cột theo nhóm được sắp xếp theo thứ tự .

Nguyên nhân dẫn đến chất lượng chỉ mục columnstore kém

Nếu bạn đã xác định các bảng có chất lượng phân đoạn kém, bạn muốn xác định nguyên nhân gốc rễ. Dưới đây là một số nguyên nhân phổ biến khác khiến chất lượng phân đoạn kém:

  1. Áp lực bộ nhớ khi chỉ mục được tạo
  2. Khối lượng lớn các hoạt động DML
  3. Hoạt động tải nhỏ hoặc nhỏ giọt
  4. Quá nhiều phân vùng

Những yếu tố này có thể khiến chỉ mục cột lưu trữ có ít hơn đáng kể so với 1 triệu hàng tối ưu cho mỗi nhóm hàng. Chúng cũng có thể khiến các hàng chuyển đến nhóm hàng delta thay vì nhóm hàng được nén.

Áp lực bộ nhớ khi chỉ mục được tạo

Số hàng trên mỗi nhóm hàng được nén có liên quan trực tiếp đến chiều rộng của hàng và dung lượng bộ nhớ có sẵn để xử lý nhóm hàng. Khi các hàng được ghi vào bảng cột trong kho lưu trữ dưới áp lực của bộ nhớ, chất lượng phân đoạn kho lưu trữ cột có thể bị ảnh hưởng. Do đó, cách thực hành tốt nhất là cung cấp cho phiên đang ghi vào các bảng chỉ mục trong cột của bạn quyền truy cập vào càng nhiều bộ nhớ càng tốt. Vì có sự cân bằng giữa bộ nhớ và đồng thời, hướng dẫn về cấp phát bộ nhớ phù hợp phụ thuộc vào dữ liệu trong mỗi hàng của bảng của bạn, các đơn vị kho dữ liệu được phân bổ cho hệ thống của bạn và số lượng khe cắm đồng thời mà bạn có thể cung cấp cho phiên đang ghi dữ liệu vào bảng của bạn.

Khối lượng lớn các hoạt động DML

Một khối lượng lớn các hoạt động DML cập nhật và xóa các hàng có thể dẫn đến sự kém hiệu quả vào kho chuyên mục. Điều này đặc biệt đúng khi hầu hết các hàng trong một nhóm hàng được sửa đổi.

  • Việc xóa một hàng khỏi một nhóm hàng đã nén chỉ đánh dấu một cách hợp lý hàng đó là đã bị xóa. Hàng vẫn nằm trong nhóm hàng đã nén cho đến khi phân vùng hoặc bảng được tạo lại.
  • Chèn một hàng sẽ thêm hàng vào bảng lưu trữ hàng nội bộ được gọi là nhóm hàng delta. Hàng đã chèn sẽ không được chuyển đổi thành cột lưu trữ cho đến khi nhóm hàng delta đầy và được đánh dấu là đã đóng. Nhóm hàng sẽ bị đóng khi chúng đạt đến công suất tối đa là 1.048.576 hàng.
  • Cập nhật một hàng ở định dạng columnstore được xử lý dưới dạng xóa hợp lý và sau đó là chèn. Hàng đã chèn có thể được lưu trữ trong cửa hàng delta.

Các thao tác cập nhật và chèn hàng loạt vượt quá ngưỡng hàng loạt 102.400 hàng cho mỗi bản phân phối được căn chỉnh theo phân vùng sẽ chuyển trực tiếp đến định dạng cột cửa hàng. Tuy nhiên, giả sử phân phối đồng đều, bạn sẽ cần phải sửa đổi hơn 6,144 triệu hàng trong một thao tác để điều này xảy ra. Nếu số hàng cho một phân phối được căn chỉnh theo phân vùng nhất định nhỏ hơn 102.400, các hàng sẽ chuyển đến cửa hàng delta và ở đó cho đến khi đủ số hàng đã được chèn hoặc sửa đổi để đóng nhóm hàng hoặc chỉ mục đã được tạo lại.

Hoạt động tải nhỏ hoặc nhỏ giọt

Các tải nhỏ chảy vào nhóm SQL chuyên dụng đôi khi còn được gọi là tải nhỏ giọt. Chúng thường đại diện cho một luồng dữ liệu gần như không đổi đang được hệ thống nhập vào. Tuy nhiên, vì luồng này gần liên tục nên khối lượng các hàng không đặc biệt lớn. Thông thường, dữ liệu dưới ngưỡng cần thiết đáng kể để tải trực tiếp sang định dạng cột lưu trữ.

Trong những tình huống này, tốt hơn hết là bạn nên đưa dữ liệu vào kho lưu trữ Azure blob và để dữ liệu tích lũy trước khi tải. Kỹ thuật này thường được gọi là phương pháp trộn vi mô.

Quá nhiều phân vùng

Một điều khác cần xem xét là tác động của việc phân vùng đối với các bảng trong kho lưu trữ cột được nhóm lại của bạn. Trước khi phân vùng, SQL pool chuyên dụng đã chia dữ liệu của bạn thành 60 cơ sở dữ liệu. Phân vùng chia nhỏ hơn nữa dữ liệu của bạn. Nếu bạn phân vùng dữ liệu của mình, thì hãy xem xét rằng phân vùng mỗi cần ít nhất 1 triệu hàng để được hưởng lợi từ chỉ mục columnstore được phân nhóm. Nếu bạn phân vùng bảng của mình thành 100 phân vùng, thì bảng của bạn cần có ít nhất 6 tỷ hàng để được hưởng lợi từ chỉ mục columnstore được phân nhóm (60 bản phân phối 100 phân vùng 1 triệu hàng). Nếu bảng 100 phân vùng của bạn không có 6 tỷ hàng, hãy giảm số lượng phân vùng hoặc cân nhắc sử dụng bảng heap.

Sau khi các bảng của bạn đã được tải một số dữ liệu, hãy làm theo các bước bên dưới để xác định và xây dựng lại các bảng với các chỉ mục cột cửa hàng được phân nhóm dưới mức tối ưu.

Xem Thêm  Cách làm tròn số thập phân trong Javascript - javascript làm tròn đến thập phân

Tạo lại chỉ mục để cải thiện chất lượng phân khúc

Bước 1: Xác định hoặc tạo người dùng sử dụng đúng loại tài nguyên

Một cách nhanh chóng để cải thiện ngay lập tức chất lượng phân khúc là xây dựng lại chỉ mục. SQL được trả về bởi dạng xem trên chứa một câu lệnh ALTER INDEX REBUILD, có thể được sử dụng để xây dựng lại các chỉ mục của bạn. Khi xây dựng lại chỉ mục của bạn, hãy đảm bảo rằng bạn phân bổ đủ bộ nhớ cho phiên xây dựng lại chỉ mục của bạn. Để thực hiện việc này, hãy tăng loại tài nguyên của người dùng có quyền xây dựng lại chỉ mục trên bảng này đến mức tối thiểu được khuyến nghị.

Dưới đây là ví dụ về cách cấp phát nhiều bộ nhớ hơn cho người dùng bằng cách tăng loại tài nguyên của họ. Để làm việc với các lớp tài nguyên, hãy xem Các lớp tài nguyên để quản lý khối lượng công việc .

  EXEC sp_addrolemember 'xlargerc', 'LoadUser';
 

Bước 2: Tạo lại các chỉ mục columnstore được phân nhóm với người dùng cấp tài nguyên cao hơn

Đăng nhập với tư cách người dùng từ bước 1 ( LoadUser ), hiện đang sử dụng lớp tài nguyên cao hơn và thực thi các câu lệnh ALTER INDEX. Đảm bảo rằng người dùng này có quyền ALTER đối với các bảng mà chỉ mục đang được xây dựng lại. Những ví dụ này cho thấy cách xây dựng lại toàn bộ chỉ mục columnstore hoặc cách xây dựng lại một phân vùng duy nhất. Trên các bảng lớn, việc xây dựng lại chỉ mục một phân vùng tại một thời điểm sẽ thực tế hơn.

Ngoài ra, thay vì tạo lại chỉ mục, bạn có thể sao chép bảng này sang một bảng mới bằng CTAS . Cách nào là tốt nhất? Đối với khối lượng lớn dữ liệu, CTAS thường nhanh hơn ALTER INDEX . Đối với khối lượng dữ liệu nhỏ hơn, ALTER INDEX dễ sử dụng hơn và không yêu cầu bạn hoán đổi bảng.

  - Xây dựng lại toàn bộ chỉ mục được phân nhóm
ALTER INDEX TẤT CẢ TRÊN [dbo]. [DimProduct] REBUILD;
 
  - Tạo lại một phân vùng duy nhất
ALTER INDEX TẤT CẢ TRÊN [dbo]. [FactInternetSales] REBUILD Partition = 5;
 
  - Tạo lại một phân vùng duy nhất với tính năng nén lưu trữ
ALTER INDEX TẤT CẢ TRÊN [dbo]. [FactInternetSales] REBUILD Partition = 5 WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
 
  - Tạo lại một phân vùng duy nhất với tính năng nén columnstore
ALTER INDEX TẤT CẢ TRÊN [dbo]. [FactInternetSales] REBUILD Partition = 5 WITH (DATA_COMPRESSION = COLUMNSTORE);
 

Xây dựng lại một chỉ mục trong nhóm SQL chuyên dụng là một hoạt động ngoại tuyến. Để biết thêm thông tin về việc xây dựng lại chỉ mục, hãy xem phần ALTER INDEX REBUILD trong Columnstore Indexes Defragmentation ALTER INDEX .

Bước 3: Xác minh chất lượng phân khúc columnstore được phân nhóm đã được cải thiện

Chạy lại truy vấn mà bảng đã xác định có chất lượng phân đoạn kém và xác minh chất lượng phân đoạn đã được cải thiện. Nếu chất lượng phân khúc không được cải thiện, có thể các hàng trong bảng của bạn quá rộng. Cân nhắc sử dụng lớp tài nguyên cao hơn hoặc DWU khi xây dựng lại các chỉ mục của bạn.

Tạo lại chỉ mục bằng CTAS và chuyển đổi phân vùng

Ví dụ này sử dụng câu lệnh CREATE TABLE AS SELECT (CTAS) và chuyển đổi phân vùng để tạo lại phân vùng bảng.

  - Bước 1: Chọn phân vùng dữ liệu và ghi nó ra một bảng mới bằng CTAS
TẠO BẢNG [dbo]. [FactInternetSales_20000101_20010101]
    VỚI (PHÂN PHỐI = HASH ([ProductKey])
            , CHỈ SỐ CỘT CỘT ĐƯỢC ĐIỀU CHỈNH
            , PARTITION ([OrderDateKey] QUYỀN TẢI TRỌNG CHO CÁC GIÁ TRỊ
                                (20000101,20010101
                                )
                            )
            )
BẰNG 
LỰA CHỌN  *
TỪ [dbo]. [FactInternetSales]
WHERE [OrderDateKey] & gt; = 20000101
VÀ [OrderDateKey] & lt; 20010101
;

- Bước 2: Chuyển VÀO dữ liệu đã tạo lại với tùy chọn TRUNCATE_TARGET
ALTER TABLE [dbo]. [FactInternetSales_20000101_20010101] CHUYỂN ĐỔI PHẦN 2 THÀNH [dbo]. [FactInternetSales] PHẦN 2 VỚI (TRUNCATE_TARGET = ON);
 

Để biết thêm thông tin về cách tạo lại phân vùng bằng CTAS, hãy xem phần Sử dụng phân vùng trong nhóm SQL chuyên dụng .

Các bước tiếp theo

Để biết thêm thông tin về cách phát triển bảng, hãy xem Phát triển bảng .


Xem thêm những thông tin liên quan đến chủ đề lập chỉ mục bảng trong sql

Tạo Function trong sql servre | Hàm Trong sql server | Giải đề SQL Đề 9 câu 3

  • Tác giả: Son Nguyen
  • Ngày đăng: 2018-06-12
  • Đánh giá: 4 ⭐ ( 4060 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mọi thắc mắc các bạn có thể liên hệ fb cá nhân: https://www.facebook.com/nhsonit
    Tham ra groups học cntt để thảo luận: https://www.facebook.com/groups/it2techone/

CREATE INDEX – Lệnh tạo chỉ mục

  • Tác giả: www.sql.edu.vn
  • Đánh giá: 4 ⭐ ( 8395 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lệnh CREATE INDEX trong Microsoft SQL Server dùng để tạo chỉ mục (Index) trong bảng (Table). Có 2 loại Index là Clustered Index và Non-Clustered Index.

Chỉ mục (index) trong mysql – giải nghĩa và các lệnh cơ bản

  • Tác giả: bizflycloud.vn
  • Đánh giá: 4 ⭐ ( 8837 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chỉ mục hay index là một mô hình bảng tra cứu được Database Search Engine sử dụng để tăng tốc độ và hiệu suất truy xuất dữ liệu thông qua con trỏ.

Chỉ mục (INDEX) trong MySQL

  • Tác giả: hoclaptrinh.vn
  • Đánh giá: 3 ⭐ ( 9929 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Một cơ sở dữ liệu với chỉ mục là một cấu trúc dữ liệu mà cải thiện tốc độ của các hoạt động trong một bảng.

Chỉ mục (index) trong mysql

  • Tác giả: viblo.asia
  • Đánh giá: 3 ⭐ ( 2481 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1. Khái niệm về chỉ mục (index) trong mysql

Index – Chỉ mục trong SQL – Deft Blog

  • Tác giả: shareprogramming.net
  • Đánh giá: 5 ⭐ ( 9947 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chỉ mục (INDEX) trong SQL là bảng tra cứu đặc biệt mà công cụ tìm kiếm cơ sở dữ liệu có thể sử dụng để tăng nhanh thời gian và hiệu suất

Index trong SQL Server

  • Tác giả: comdy.vn
  • Đánh giá: 4 ⭐ ( 4198 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tìm hiểu về index trong SQL Server để có một chiến lược tạo index tốt nhằm tối ưu hóa các truy vấn của bạn.

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