Терадата - Объясните

Команда EXPLAIN возвращает план выполнения механизма синтаксического анализа на английском языке. Его можно использовать с любым оператором SQL, кроме другой команды EXPLAIN. Когда запросу предшествует команда EXPLAIN, план выполнения механизма синтаксического анализа возвращается пользователю вместо AMP.

Примеры EXPLAIN

Рассмотрим таблицу Employee со следующим определением.

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 );

Некоторые примеры плана EXPLAIN приведены ниже.

Полное сканирование таблицы (FTS)

Если в операторе SELECT не указаны условия, оптимизатор может выбрать использование полного сканирования таблицы, при котором осуществляется доступ к каждой строке таблицы.

пример

Ниже приведен пример запроса, в котором оптимизатор может выбрать FTS.

EXPLAIN SELECT * FROM employee;

Когда вышеуказанный запрос выполняется, он дает следующий результат. Как видно, оптимизатор выбирает доступ ко всем AMP и всем строкам в 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.

Уникальный первичный индекс

Когда доступ к строкам осуществляется с использованием уникального первичного индекса, это одна операция AMP.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Когда вышеуказанный запрос выполняется, он дает следующий результат. Как можно видеть, это поиск с одним AMP, и оптимизатор использует уникальный первичный индекс для доступа к строке.

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.

Уникальный вторичный индекс

Когда доступ к строкам осуществляется с использованием уникального вторичного индекса, это операция с двумя усилителями.

пример

Рассмотрим таблицу Зарплата со следующим определением.

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

Рассмотрим следующий оператор SELECT.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Когда вышеуказанный запрос выполняется, он дает следующий результат. Как видно, оптимизатор извлекает строку за два этапа, используя уникальный вторичный индекс.

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.

Дополнительные условия

Ниже приводится список терминов, часто встречающихся в плане EXPLAIN.

... (Last Use) …

Спул-файл больше не нужен и будет выпущен после завершения этого шага.

... with no residual conditions …

К строкам применены все применимые условия.

... END TRANSACTION …

Блокировки транзакций снимаются, и изменения фиксируются.

... eliminating duplicate rows ...

Дублирующиеся строки существуют только в файлах спула, но не в таблицах. Выполнение DISTINCT операции.

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

Создается файл спула, содержащий идентификаторы строк, найденные во вторичном индексе (индекс #n)

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

Объединение строк с помощью оператора UNION, MINUS или INTERSECT.

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

Распространение данных при подготовке к объединению.

... which is duplicated on all AMPs.

Дублирование данных из меньшей таблицы (с точки зрения SPOOL) при подготовке к объединению.

... (one_AMP) or (group_AMPs)

Указывает, что вместо всех AMP будет использоваться один AMP или подмножество AMP.