184 похожих чатов

Всем привет!) Вопрос по оптимизации. Есть запрос SELECT ta.val, tb.val FROM

ta, tb
WHERE
ta.a BETWEEN tb.a and tb.b;
Таблица tb содержит диапазон UInt32 - a,b и соответствующие значение val. Ищем вхождение ta.a в диапазон и выводим результат.
Запрос чертовски тормозной... 1500 из ta записей за 5 минут. Размер tb - 3М записей.
Куда покопать? (словари смотрел - даипазоны не умеет, хотя есть хак. скорость сопоставима)

11 ответов

10 просмотров

ну. запрос тормозной потому что сначала ta + tb JOIN делается в памяти а потом только фильтрация какой объем данных в tb в байтах несжатых?

ssv- Автор вопроса
Slach [altinity]
ну. запрос тормозной потому что сначала ta + tb JO...

если верить дбиверу 65мб, но это я так понимаю пожатых..

ssv- Автор вопроса
Slach [altinity]
ну. запрос тормозной потому что сначала ta + tb JO...

и как такое порешать? держать отдельную таблицу с хешами или типа того и обновлять ее по уникальным значениям из ta?

ssv
и как такое порешать? держать отдельную таблицу с ...

ну можно попробовать сделать из второй таблицы словарь и вместо JOIN через ta, tb делать SELECT ta.val, dictGet( ...) FROM ta WHERE ta.a BETWEEN dictGet() AND dictGet()

А чем не подошел словарь с range_hashed? https://kb.altinity.com/altinity-kb-dictionaries/altinity-kb-range_hashed-example-open-intervals

несколько лет назад у меня была похожая задача на другой БД. Я должен был определить какому оператору принадлежит огромный список телефонов. Была таблица с диапазонами. Все очень сильно тормозило. В итоге я пришел к такому решению. Диапазоны выпрямил скриптом была одна запись 212000 - 215000 Мухосрансктелеком стало много 212 Мухосрансктелеком 213 Мухосрансктелеком 214 Мухосрансктелеком 215 Мухосрансктелеком И уже с таким списком все работало быстро условие переписывается на = и индексы работают substring(mytel,1,3) = t.prefix

ssv- Автор вопроса
Ildar Garaev
несколько лет назад у меня была похожая задача на ...

Спасибо за идею, оценю кол-во новых записей, может и выгорит.

ssv- Автор вопроса
Boris
А чем не подошел словарь с range_hashed? https://...

Пробовал, возможно где-то косякнул - скорость сравнимая была. И грузился он очень долго..

Ildar Garaev
несколько лет назад у меня была похожая задача на ...

По трем цифрам кода (ABC/DEF) сегодня нельзя определить оператора. Таблица Россвязи уходит вглубь до 5-6 знаков. Поэтому простой словарь будет слишком большим. Но range_hashed вполне нормальных размеров получается. У меня так: select dictGet('e164_ru','operator',toUInt64(7965),1234567); ключ - ABC/DEF код, диапазоны как у россвязи

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта