powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизировать запрос с тремя JOIN и несколькими LIKE
33 сообщений из 33, показаны все 2 страниц
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668762
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Столкнулся с проблемой, имеется запрос вида:

Код: sql
1.
2.
3.
4.
5.
SELECT o_name, o_priority FROM table1 
JOIN table2 ON table2.id_t1 = table1.id
LEFT JOIN table3 ON table2.id = table3.id_t2
JOIN table4 ON table2.id = table4.id_t2
WHERE (table3.value LIKE '%ddfmkd%') OR (table3.value LIKE '%bgghng%') OR (table4.value LIKE '%dddff%') 



Работает очень медленно, причём из-за:
Код: sql
1.
2.
3.
4.
SELECT o_name, o_priority FROM table1 
JOIN table2 ON table2.id_t1 = table1.id
LEFT JOIN table3 ON table2.id = table3.id_t2
JOIN table4 ON table2.id = table4.id_t2



Есть ли возможность оптимизировать ???
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668765
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
03.07.2018 13:15, Acrobat2 пишет:
> Есть ли возможность оптимизировать ???

да
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668769
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Направьте на путь праведный, о мудрые старцы.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668773
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

для начала перемести LEFT JOIN в конец. А потом кури планы.
Впрочем LIKE с поиском внутри строки не индексируется. Если к table3 всегда применяется поисковое выражении в WHERE, то и LEFT JOIN не нужен, достаточно JOIN. А там глядишь может получится получить выгоду от алогритма MERGE/HASH JOIN
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668777
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!! Стало быстрее, но всё равно хочется быстрее))))
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668815
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как быстро выполняются и сколько записей выдают запросы:
Код: sql
1.
2.
3.
SELECT table3.id_t2 FROM table3 WHERE (table3.value LIKE '%ddfmkd%') OR (table3.value LIKE '%bgghng%')

SELECT table4.id_t2 FROM table4 WHERE (table4.value LIKE '%dddff%') 
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668866
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

Если таблица небольшая, то есть вариант для ускоренного отбора строк с вашими фразами(словами) c LIKE:

1) искомое поле для LIKE загнать в новую таблицу, разделив на отдельные слова. Например
слово Иванов Петр Сидорович будет как отдельные строки:

Код: plsql
1.
select id,parent,splitted_word from table_split



Код: plaintext
1.
2.
3.
1,22, Иванов 
2,22, Петр 
3,22, Сидорович 
с нужными ключами (в данном случае=22).

2) далее в текстах запросов использовать STARTING WITH, при этом подцепится индекс по этому полю;

У нас ускорение получилось добиться примерно в 20 раз. Попробуйте, м.б. вам это поможет.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668872
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за идею, я вот тоже думал, как можно изменить существующие таблицы или добавить новую для ускорения. Проблема к сожалению не в LIKE, проблема в JOINах, очень медленно выполняет.
WildSery
завтра проверю, сейчас нет возможности.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668873
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
03.07.2018 15:11, Acrobat2 пишет:
> проблема в JOINах, очень медленно выполняет.

никому не показывай планы запросов.
так будет быстрее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668874
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий03.07.2018 15:11, Acrobat2 пишет:
> проблема в JOINах, очень медленно выполняет.

никому не показывай планы запросов.
так будет быстрее.


Сейчас к сожалению нет возможности показать, только завтра (((
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668904
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

вот как забавно, т.е. план посмотреть не можем, а про ускорение говорим. Как мерили?
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39668931
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAcrobat2,

вот как забавно, т.е. план посмотреть не можем, а про ускорение говорим. Как мерили?

Я просто уже дома)))) План остался за горизонтом))))
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670164
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С запросом разобрался, разделил на два, т.к. находится редко, а проверять надо часто. Всем спасибо за помощь. Хотел ещё спросить, как лучше сделать. Есть БД с строковыми значениями телефонных номеров. Примерно 5000 раз в минуту (5000 номеров), необходимо проверять, следующим образом, есть ли вхождение строки (номера) из БД в проверяемую (которых ~5000 в мин), т.е. нужно каждый номер из БД проверять на вхождение в заданный номер. БД весит не много, записей примерно тысяч 10. Получается единственное что можно сделать, это загрузить БД в оперативную память и с неё в цикле перебирать все номера и искать вхождение ???
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670169
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не для бд задача
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670170
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё это не для БД? А для чего?

Автор, задача не ясна. Кто на ком стоял? 5000 тысяч - число красивое. Как 120 - приборы.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670172
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так думаю, тут снова нужен программист...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670176
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery,

Есть номер телефона, например 89231234578, нужно проверить все записи из БД на вхождение (на подстроку) в этом номере. Например очередной номер из БД имеет вид 1234578, это будет совпадением. SQL такую задачу не решить. Хочется спросить профи, как сделать оптимальнее.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670180
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

а по полным номерам нельзя искать или хранить полные номера?
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670181
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению нет, в этом вся и сложность.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670182
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задача - тьфу.
арабских цифр всего 10.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670184
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2Есть номер телефона, например 89231234578 ...номер из БД имеет вид 1234578
Хрустальный шар подсказывает, что надо не просто подстроку, а хвост.
Если так, то откусывай от пришедшего номера по одному начальному символу и проверяй на полное совпадение. И так до минимального размера, который вообще имеет смысл.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670185
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийзадача - тьфу.
арабских цифр всего 10.

Не понял Вас, какая разница 10 их или 10 млн. Тут же задача на сравнение и сдвиг.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670188
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
afgmAcrobat2Есть номер телефона, например 89231234578 ...номер из БД имеет вид 1234578
Хрустальный шар подсказывает, что надо не просто подстроку, а хвост.
Если так, то откусывай от пришедшего номера по одному начальному символу и проверяй на полное совпадение. И так до минимального размера, который вообще имеет смысл.
Хвост это тоже подстрока, вопрос я задал фундаментального характера. Вы предлагаете тупо перебирать каждый раз, о чём я и писал выше.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670189
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2Хвост это тоже подстрока, вопрос я задал фундаментального характера. Вы предлагаете тупо перебирать каждый раз, о чём я и писал выше.
Не тупо перебирать, а прицельно искать. И таких индексных поисков будет всего несколько штук.
Если вот прям любая-любая подстрока, то уже сложнее.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670190
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторяю: без привлечения программиста задачу не решить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670191
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за ответы. Буду думать, пробовать, действовать.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670192
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

Если я правильно вас понял, то

1) Создай дубликат поля но с реверсным строковым значением, например ваш номер 1234578
в новом поле будет выглядеть 8754321

2) Далее в SELECT используй кляузу starting with
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670193
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2,

если сравнивается всегда хвост , то можно замутить индекс по выражению для реверсированной строки.

Код: sql
1.
2.
CREATE INDEX IDX_REVERSE_PHONE ON PERSONS
COMPUTED BY (REVERSE (PHONE));



Ну и будешь искать примерно так

Код: sql
1.
SELECT * FROM PERSON WHERE REVERSE (PHONE) STARTING WITH REVERSE('1234578');



при условии, что в PERSON всегда хранится полный номер
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670194
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.07.2018 17:06, AltHasp пишет:
> Если я правильно вас понял, то

хорошо поставленная задача == половине решения!
(не уверен что всё именно так)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670196
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл уточнить что индекс при этом будет цепляться.
Код: plsql
1.
 select field1 from table1 where my_fields starting with REVERSE('8754321')



как-то так. Попробуйте, должно подойти.
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670210
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acrobat2SQL такую задачу не решить.
Код: sql
1.
2.
select * from table1
  where :param starting with table1.nomer


Похоже, действительно, программист нужен.

А ежели тут не вхождение, а похожесть числа через более сложные алгоритмы (Марковский цепей и т.п.), то ...
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670365
Flashpoke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Acrobat2С запросом разобрался, разделил на два, т.к. находится редко, а проверять надо часто. Всем спасибо за помощь. Хотел ещё спросить, как лучше сделать. Есть БД с строковыми значениями телефонных номеров. Примерно 5000 раз в минуту (5000 номеров), необходимо проверять, следующим образом, есть ли вхождение строки (номера) из БД в проверяемую (которых ~5000 в мин), т.е. нужно каждый номер из БД проверять на вхождение в заданный номер. БД весит не много, записей примерно тысяч 10. Получается единственное что можно сделать, это загрузить БД в оперативную память и с неё в цикле перебирать все номера и искать вхождение ???Мне кажется, что для этой задачи тебе нужен другой инструмент.
Пригодится триграммный индекс или, возможно, специальный префиксный индекс типа этого .
...
Рейтинг: 0 / 0
Оптимизировать запрос с тремя JOIN и несколькими LIKE
    #39670809
Acrobat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийповторяю: без привлечения программиста задачу не решить.

Скорее всего так. Знай своё место.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизировать запрос с тремя JOIN и несколькими LIKE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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