|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
Всем привет! Проблема состоит в следующем: Есть таблица, в которую сваливаются данные о действиях юзеров на сайте, в том числе IP. И вторая таблица соответствиями диапазонов IP адресов странам. Задача: получить по ip из таблицы 1 страну пользователя из таблицы 2 (сджойнить). Проблема: non-euqi join вида join on (IP1 >= IP_BEGIN_RANGE and IP1 <=IP_END_RANGE) выполняется адски медленно, и при анализе плана выполнения запроса БД прямым текстом ругается на non-equi join и решает проблему перебором. DB SAP HANA. Буду признателен за любые идеи как ее подстегнуть) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 23:50 |
|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
voldermar666, На ум одно лишь приходит -- до загрузки в Хану (или при загрузке) прописывать суррогатные ключи. Тогда уже в Хане будет эквиджойн, и включится колоночный движок. Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 01:08 |
|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
lookat, спасибо, а можно подробнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 10:22 |
|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
voldermar666, Вы как данные в Хану грузите? ETL или просто LOAD FROM 'FILE'? По любому, добавьте в схему данных (как в "источнике", так и в "приемнике") поле 'country_id' (суррогатный ключ кода страны) и заполняйте его -- либо ETL-job'ом, либо как-то еще -- чем Вы там генерите файлы для загрузки в Хану. Lookup-таблицу с этими суррогатными ключами сделайте из Вашей таблицы db-ip (или что Вы там используете). Смысл этих действий прост: Ваш нон-эквиджойн делается на этапе приготовления данных для загрузки, а уже в Хане будете делать обычный (экви-)джойн по 'country_id' с незамысловатой таблицой 'country' (country_id int, country_name varchar(...)) Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 11:31 |
|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
lookat, спасибо за совет, действительно на этапе загрузки возможны любые манипуляции, но фишка в том, что все надо делать on-the-fly, а данные попадают в хану напрямую с сайта, где происходят действия пользователя. Шлет это все javascript. У меня была идея сделать джобу, которая делает этот non-equi join "в фоне", наверное так и придется поступать... еще идеи?) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 14:50 |
|
Можно ли ускорить/избежать non-equi join?
|
|||
---|---|---|---|
#18+
voldermar666, идей по поводу "что делать" больше нет. только по поводу "когда, где и как делать". если "на лету", то можете вычислять страну, создав lookup array и выбирая из него яваскриптом. таблица будет примерно строк на 200 тысяч (~10Mb). ну и Ваш вариант "из Ханы в Хану" тоже годится. Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 15:19 |
|
|
start [/forum/topic.php?fid=56&fpage=6&tid=2015188]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
380ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 234ms |
total: | 705ms |
0 / 0 |