|
JOIN по неточному соответствию с точки зрения использования индексов
|
|||
---|---|---|---|
#18+
У меня есть две таблицы, скажем, T_DATA и T_DICT, в каждой из которых есть колонка Код: sql 1.
. 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.
, либо Код: sql 1.
. Позволит ли какой-то из этих вариантов использовать индекс? И если нет, то есть ли какой-то другой способ который будет работать с индексом, без изменения структуры или формата данных? DBMS: DB2/NT64 (ver. SQL11010) Effective version: IBM Db2 LUW (ver. 11.1.0) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 14:32 |
|
JOIN по неточному соответствию с точки зрения использования индексов
|
|||
---|---|---|---|
#18+
Посмотрите план запроса, там будет видно индекс используется или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 14:55 |
|
JOIN по неточному соответствию с точки зрения использования индексов
|
|||
---|---|---|---|
#18+
Guzya, спасибо за ответ, но, к сожалению, план я посмотреть тоже не могу, отсутствуют необходимые для этого таблицы... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 16:25 |
|
JOIN по неточному соответствию с точки зрения использования индексов
|
|||
---|---|---|---|
#18+
DocAl, Если "соединить данные из T_DATA с T_DICT через LEFT OUTER JOIN по C_CODE" предполагает что-то вроде: Код: sql 1. 2. 3. 4.
То да, у вас есть хороший шанс получить использование существующего индекса по T_DICT.C_CODE, если у него тоже хорошая cardinality (большое число разных значений). Тогда ничего не должно помешать получить иcкомый план типа T_DATA (outer) NLJOIN T_DICT (inner). Если вы наоборот хотите словарем ограничивать выборку, то: Код: sql 1. 2. 3.
чтобы получить иcкомый план типа T_DICT (outer) NLJOIN T_DATA (inner). Иными словами не используйте выражение для поля inner таблицы. Но план в любом случае надо смотреть. Если нет возможности создать explain таблицы, используйте утилиту db2expln. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 20:19 |
|
|
Start [/forum/topic.php?fid=43&tid=1600113&gotolast=1]: |
0ms |
get settings: |
2ms |
get forum list: |
9ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
9ms |
get topic data: |
2ms |
get forum data: |
0ms |
get page messages: |
9ms |
get tp. blocked users: |
0ms |
others: | 84ms |
total: | 115ms |
0 / 0 |