Teradata - Giải thích

Lệnh EXPLAIN trả về kế hoạch thực thi của công cụ phân tích cú pháp bằng tiếng Anh. Nó có thể được sử dụng với bất kỳ câu lệnh SQL nào ngoại trừ trên một lệnh EXPLAIN khác. Khi truy vấn được đặt trước bằng lệnh EXPLAIN, kế hoạch thực thi của Công cụ phân tích cú pháp được trả lại cho người dùng thay vì AMP.

Ví dụ về GIẢI THÍCH

Hãy xem xét bảng Nhân viên với định nghĩa sau.

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30), 
   LastName VARCHAR(30),
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

Dưới đây là một số ví dụ về kế hoạch EXPLAIN.

Quét toàn bảng (FTS)

Khi không có điều kiện nào được chỉ định trong câu lệnh SELECT, thì trình tối ưu hóa có thể chọn sử dụng Quét toàn bảng trong đó mỗi và mọi hàng của bảng được truy cập.

Thí dụ

Sau đây là một truy vấn mẫu trong đó trình tối ưu hóa có thể chọn FTS.

EXPLAIN SELECT * FROM employee;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Có thể thấy trình tối ưu hóa chọn truy cập tất cả các AMP và tất cả các hàng trong AMP.

1) First, we lock a distinct TDUSER."pseudo table" for read on a 
   RowHash to prevent global deadlock for TDUSER.employee.  
2) Next, we lock TDUSER.employee for read.  
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
   all-rows scan with no residual conditions into Spool 1 
   (group_amps), which is built locally on the AMPs.  The size of 
   Spool 1 is estimated with low confidence to be 2 rows (116 bytes).  
   The estimated time for this step is 0.03 seconds.  
4) Finally, we send out an END TRANSACTION step to all AMPs involved 
   in processing the request. 
→ The contents of Spool 1 are sent back to the user as the result of 
   statement 1.  The total estimated time is 0.03 seconds.

Chỉ mục chính duy nhất

Khi các hàng được truy cập bằng Chỉ mục chính duy nhất, thì đó là một hoạt động AMP.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Có thể thấy đây là truy xuất AMP đơn và trình tối ưu hóa đang sử dụng chỉ mục chính duy nhất để truy cập hàng.

1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by 
   way of the unique primary index "TDUSER.employee.EmployeeNo = 101" 
   with no residual conditions. The estimated time for this step is 
   0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Chỉ mục phụ duy nhất

Khi các hàng được truy cập bằng Chỉ mục phụ duy nhất, đó là một hoạt động hai amp.

Thí dụ

Hãy xem xét bảng Lương với định nghĩa sau.

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
)
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

Hãy xem xét câu lệnh SELECT sau đây.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Như có thể thấy trình tối ưu hóa truy xuất hàng trong hoạt động hai amp bằng cách sử dụng chỉ mục phụ duy nhất.

1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary 
   by way of unique index # 4 "TDUSER.Salary.EmployeeNo = 
   101" with no residual conditions.  The estimated time for this 
   step is 0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Điều khoản bổ sung

Sau đây là danh sách các thuật ngữ thường thấy trong kế hoạch EXPLAIN.

... (Last Use) …

Tệp cuộn không cần thiết nữa và sẽ được phát hành khi bước này hoàn thành.

... with no residual conditions …

Tất cả các điều kiện áp dụng đã được áp dụng cho các hàng.

... END TRANSACTION …

Khóa giao dịch được giải phóng và các thay đổi được cam kết.

... eliminating duplicate rows ...

Các hàng trùng lặp chỉ tồn tại trong tệp cuộn, không phải bảng thiết lập. Đang thực hiện thao tác DISTINCT.

... by way of a traversal of index #n extracting row ids only …

Tệp cuộn được tạo có chứa ID hàng được tìm thấy trong chỉ mục phụ (chỉ mục #n)

... we do a SMS (set manipulation step) …

Kết hợp các hàng bằng toán tử UNION, MINUS hoặc INTERSECT.

... which is redistributed by hash code to all AMPs.

Phân phối lại dữ liệu để chuẩn bị tham gia.

... which is duplicated on all AMPs.

Sao chép dữ liệu từ bảng nhỏ hơn (về SPOOL) để chuẩn bị tham gia.

... (one_AMP) or (group_AMPs)

Cho biết một AMP hoặc một tập hợp con AMP sẽ được sử dụng thay vì tất cả AMP.