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