Учебники

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

Команда 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.

… (Последнее использование) …

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

… без остаточных условий …

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

… КОНЕЦ СДЕЛКИ …

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

… устранение дублирующихся строк …

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

… путем обхода индекса #n, извлекающего только идентификаторы строк …

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

… мы делаем смс (установить шаг манипуляции) …

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

… который перераспределяется по хэш-коду для всех AMP.

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

… который дублируется на всех AMP.

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

… (one_AMP) или (group_AMPs)

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