|  | 
| 
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&fpage=1&tid=1600113]: | 0ms | 
| get settings: | 9ms | 
| get forum list: | 11ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 31ms | 
| get topic data: | 11ms | 
| get forum data: | 2ms | 
| get page messages: | 35ms | 
| get tp. blocked users: | 2ms | 
| others: | 230ms | 
| total: | 337ms | 

| 0 / 0 | 
