powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / JOIN по неточному соответствию с точки зрения использования индексов
4 сообщений из 4, страница 1 из 1
JOIN по неточному соответствию с точки зрения использования индексов
    #40096345
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть две таблицы, скажем, T_DATA и T_DICT, в каждой из которых есть колонка
Код: sql
1.
C_CODE CHARACTER(4)

.
T_DATA -- это таблица с данными, T_DICT -- это словарь, который переводит коды различных типов в их текстовые значения.
Для данного типа кодов все значения -- это целые числа.
Мне нужно соединить данные из T_DATA с T_DICT через LEFT OUTER JOIN по C_CODE.

Сами таблицы довольно большие, но на таблице T_DICT есть уникальный ключ, который ограничивает релевантные записи в таблице до буквально нескольких штук.
Но, к сожалению, формат кода между этими таблицами различается, например, значению '7' в T_DATA.C_CODE соответствует T_DICT.C_CODE '0007'.
Ни на формат данных, ни на структуру базы повлиять я не могу, но запрос хотелось бы написать по-возможности эффективно.

Я вижу два очевидных способа это сделать:
Код: sql
1.
ON LPAD(TRIM(T_DATA.C_CODE, 4, '0') = T_DICT.C_CODE

, либо
Код: sql
1.
CAST(T_DATA.C_CODE as INT) = CAST(T_DICT.C_CODE as INT)

.
Позволит ли какой-то из этих вариантов использовать индекс?
И если нет, то есть ли какой-то другой способ который будет работать с индексом, без изменения структуры или формата данных?

DBMS: DB2/NT64 (ver. SQL11010)
Effective version: IBM Db2 LUW (ver. 11.1.0)
...
Рейтинг: 0 / 0
JOIN по неточному соответствию с точки зрения использования индексов
    #40096355
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите план запроса, там будет видно индекс используется или нет.
...
Рейтинг: 0 / 0
JOIN по неточному соответствию с точки зрения использования индексов
    #40096418
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya, спасибо за ответ, но, к сожалению, план я посмотреть тоже не могу, отсутствуют необходимые для этого таблицы...
...
Рейтинг: 0 / 0
JOIN по неточному соответствию с точки зрения использования индексов
    #40096547
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DocAl,

Если "соединить данные из T_DATA с T_DICT через LEFT OUTER JOIN по C_CODE" предполагает что-то вроде:
Код: sql
1.
2.
3.
4.
SELECT *
FROM T_DATA 
LEFT JOIN T_DICT ON T_DICT.C_CODE = LPAD(TRIM(T_DATA.C_CODE, 4, '0')
WHERE T_DATA.COL1 = ... -- с хорошим filter factor

То да, у вас есть хороший шанс получить использование существующего индекса по T_DICT.C_CODE, если у него тоже хорошая cardinality (большое число разных значений).
Тогда ничего не должно помешать получить иcкомый план типа T_DATA (outer) NLJOIN T_DICT (inner).

Если вы наоборот хотите словарем ограничивать выборку, то:
Код: sql
1.
2.
3.
SELECT *
FROM T_DICT
JOIN T_DATA ON T_DATA.C_CODE = STRIP (T_DICT.C_CODE, L, '0')

чтобы получить иcкомый план типа T_DICT (outer) NLJOIN T_DATA (inner).

Иными словами не используйте выражение для поля inner таблицы.
Но план в любом случае надо смотреть. Если нет возможности создать explain таблицы, используйте утилиту db2expln.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / JOIN по неточному соответствию с точки зрения использования индексов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]