#sql #database #db2 #explain #db2-luw
#sql #База данных #db2 #объясните #db2-luw
Вопрос:
Я установил IBM — DB2 Express Server Edition и пытаюсь выполнить инструкцию EXPLAIN для запроса.
Я уже вызвал следующую процедуру для создания таблиц EXPLAIN в SYSTOOLS
CALL SYSPROC.SYSINSTALLOBJECTS('EXPLAIN', 'C',
null), null))
и создал ТАБЛИЦУ PLAN_TABLE для моего пользователя
CREATE TABLE PLAN_TABLE
(QUERYNO INTEGER NOT NULL,
QBLOCKNO SMALLINT NOT NULL,
APPLNAME CHAR(8) NOT NULL,
PROGNAME VARCHAR(128) NOT NULL,
PLANNO SMALLINT NOT NULL,
METHOD SMALLINT NOT NULL,
CREATOR VARCHAR(128) NOT NULL,
TNAME VARCHAR(128) NOT NULL,
TABNO SMALLINT NOT NULL,
ACCESSTYPE CHAR(2) NOT NULL,
MATCHCOLS SMALLINT NOT NULL,
ACCESSCREATOR VARCHAR(128) NOT NULL,
ACCESSNAME VARCHAR(128) NOT NULL,
INDEXONLY CHAR(1) NOT NULL,
SORTN_UNIQ CHAR(1) NOT NULL,
SORTN_JOIN CHAR(1) NOT NULL,
SORTN_ORDERBY CHAR(1) NOT NULL,
SORTN_GROUPBY CHAR(1) NOT NULL,
SORTC_UNIQ CHAR(1) NOT NULL,
SORTC_JOIN CHAR(1) NOT NULL,
SORTC_ORDERBY CHAR(1) NOT NULL,
SORTC_GROUPBY CHAR(1) NOT NULL,
TSLOCKMODE CHAR(3) NOT NULL,
TIMESTAMP CHAR(16) NOT NULL,
REMARKS VARCHAR(762) NOT NULL,
PREFETCH CHAR(1) NOT NULL WITH DEFAULT,
COLUMN_FN_EVAL CHAR(1) NOT NULL WITH DEFAULT,
MIXOPSEQ SMALLINT NOT NULL WITH DEFAULT,
VERSION VARCHAR(64) NOT NULL WITH DEFAULT,
COLLID VARCHAR(128) NOT NULL WITH DEFAULT,
ACCESS_DEGREE SMALLINT ,
ACCESS_PGROUP_ID SMALLINT ,
JOIN_DEGREE SMALLINT ,
JOIN_PGROUP_ID SMALLINT ,
SORTC_PGROUP_ID SMALLINT ,
SORTN_PGROUP_ID SMALLINT ,
PARALLELISM_MODE CHAR(1) ,
MERGE_JOIN_COLS SMALLINT ,
CORRELATION_NAME VARCHAR(128) ,
PAGE_RANGE CHAR(1) NOT NULL WITH DEFAULT,
JOIN_TYPE CHAR(1) NOT NULL WITH DEFAULT,
GROUP_MEMBER CHAR(8) NOT NULL WITH DEFAULT,
IBM_SERVICE_DATA VARCHAR(254) FOR BIT DATA NOT NULL WITH DEFAULT,
WHEN_OPTIMIZE CHAR(1) NOT NULL WITH DEFAULT,
QBLOCK_TYPE CHAR(6) NOT NULL WITH DEFAULT,
BIND_TIME TIMESTAMP NOT NULL WITH DEFAULT,
OPTHINT VARCHAR(128) NOT NULL WITH DEFAULT,
HINT_USED VARCHAR(128) NOT NULL WITH DEFAULT,
PRIMARY_ACCESSTYPE CHAR(1) NOT NULL WITH DEFAULT,
PARENT_QBLOCKNO SMALLINT NOT NULL WITH DEFAULT,
TABLE_TYPE CHAR(1) ,
TABLE_ENCODE CHAR(1) NOT NULL WITH DEFAULT,
TABLE_SCCSID SMALLINT NOT NULL WITH DEFAULT,
TABLE_MCCSID SMALLINT NOT NULL WITH DEFAULT,
TABLE_DCCSID SMALLINT NOT NULL WITH DEFAULT,
ROUTINE_ID INTEGER NOT NULL WITH DEFAULT,
CTEREF SMALLINT NOT NULL WITH DEFAULT,
STMTTOKEN VARCHAR(240))
Затем я запускаю инструкцию EXPLAIN, как показано ниже (я также пробовал EXPLAIN PLAN вместо EXPLAIN ALL)
EXPLAIN ALL SET QUERYNO=1 FOR SELECT * FROM SYSIBM.SYSDUMMY1
Я вижу, что таблицы EXPLAIN, такие как EXPLAIN_INSTANCE или EXPLAIN_STATEMENT, получают данные в них, но ТАБЛИЦА PLAN_TABLE пуста.
Есть ли что-то, чего мне здесь не хватает, или все еще нужно настроить? Я привык выполнять объяснения в среде мэйнфреймов, и моя ТАБЛИЦА PLAN_TABLE всегда заполняется правильно.
Спасибо!
Комментарии:
1. Как вы думаете, зачем вам нужна эта ТАБЛИЦА PLAN_TABLE?
2. @a_horse_with_no_name Вот для чего
EXPLAIN_*
нужны таблицы в DB2 для LUW; Я спрашиваю конкретноPLAN_TABLE
.3. Я привык просматривать таблицу PLAN_TABLE, чтобы увидеть тип доступа, используемые индексы, совпадающие столбцы, используются ли сортировки и т. Д. Я не вижу, где я могу найти эту информацию в таблицах EXPLAIN_ *. Как я уже сказал, я привык делать это на мэйнфрейме, так что, возможно, здесь что-то по-другому.
4. Я не уверен, почему вы не можете найти то, что ищете, в таблицах explain: все там, как описано в руководстве . Рассмотрите возможность использования
db2exfmt
утилиты вместо ручного запроса таблиц explain.5. Итак, из того, что я понимаю, невозможно использовать таблицы плана таким же образом в DB2 для LUW, как они используются в DB2 для z / OS. Это правильно? Тогда я рассмотрю эти альтернативные методы. Спасибо.