|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
есть таблица (mysql 8++) в ней поле name varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci ADD UNIQUE INDEX UK_bars_name (name) есть хранимка Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
для неё входной параметр подготавливается отдельно, и имеет вид name like '%xxx%' [and name like ..] name like может быть сколько угодно(но из практики 3 достаточно) в таблице 1 000 000 с не большим записей. если вместо xxx ( в name like '%xxx%' ) ввести заведомо отсутствующий набор символов , то получается скан всей таблицы - это 0.4сек если что-то присутствующее - то (при 3 like) 100-300 мс (поиск происходит при вводе очередного символа в поле инпут в браузере содержимое инпута отправляется на сервер при вводе каждого символа) вопрос - это долго или нормально? (условный вопрос) - реально ли как-то ускорить (в ini прописаны достаточные параметры по памяти - гигабайты) - не упирается ли это быстродействие в скорость работы с памятью? - задача такого поиска - быстрый ввод товара в документы. 1000 000 взято чисто из инета - реальное количество сколько может быть? вопросы из разряда спортивного интереса и проведения опытов. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 14:38 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя поиск происходит при вводе очередного символа в поле инпут в браузере содержимое инпута отправляется на сервер при вводе каждого символа ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 14:48 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Akina А откуда тогда несколько лайков - поле-то одно, и значение в нём одно... Код: plaintext
Код: plaintext
получается 3 like Код: sql 1.
найдёт именно эту строку ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 15:08 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
помниться мне Вадя очень был рад что план в какой то версии показал что при like % используется индекс, но тема все та же, "можно ли ускорить да как ускорить...." ответ как и много лет назад - НЕ ИСПОЛЬЗОВАТЬ Like % ))) проверял я тогда на трех версиях MySQL - время совпадало что с "показом использовании индекса", что без него... а ВОЗ и ныне там... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 17:39 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Alex_Ustinov, по поводу Alex_Ustinov НЕ ИСПОЛЬЗОВАТЬ Like % ))) придумай что-либо более , что может его заменить. время прошло, версии mysql обновились, подумал - может что придумали лучшее, что не учёл... ну счас есть и кроме быстродействия вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 18:02 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя что может его заменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 18:19 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадяпридумай что-либо более , что может его заменить.если не заложено на ВАЗ возить бревна в 1 тонну, то ходить вокруг него и думать как пристроить кузов бесполезно. Я думаю тебе надо самому что-то придумать, может перечитать варианты что тебе советовали... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 18:29 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Akina Ну вообще-то быстрый поиск подстроки - это суффиксное дерево... но MySQL про него не в курсе. Alex_Ustinov если не заложено на ВАЗ возить бревна в 1 тонну, то ходить вокруг него и думать как пристроить кузов бесполезно. ну нет ничего нового- так нет.... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 18:55 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
авторк примеру 5.7 на порядок медленнее в этом плане чем 8++ сомневаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 19:57 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Alex_Ustinov сомневаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 20:00 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя 1000 000 взято чисто из инета - реальное количество сколько может быть? В автозапчастях может быть и сильно больше, там ориентируйтесь на 20 миллионов. Но для большинства направлений и 100 тысяч достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 20:12 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя, Еще предложил бы на рассмотрение варианты: 1) в запросе добавить LIMIT 101. Если выбрано 100 или менее записей, то просто показывать их пользователю. Если выбрана 101 запись, то дополнительно говорить "найдено более 100 вариантов, уточните поиск". Или даже вообще только эту запись. Экономия в том, что если подходящих записей слишком много, то не сканировать всю таблицу, а бросить гораздо раньше. 2) Если количество найденных записей достаточно умеренное (заметно меньше исходного количества), то сохранять их где-либо (хоть в другой таблице, лучше IN-MEMORY) и при наборе следующего символа искать уже в этом наборе, а не в исходной таблице 3) прикрутить внешний поиск, например, Сфинкс. Еще можно прикрутить совсем внешний поиск (т.е. сторонний сервис). Мне доводилось работать с таким. Ищет быстро, сильно быстрее обычного LIKE '%строка%'. Но тот сервис загнулся. Да и зависимость от стороннего сервиса как-то не здорово. 4) Проверять ввод. - не делать поиск, если во введенной строке нет ни одного слова длиннее 2-3 символов. Т.е. по строке "а б в" поиск даже начинать не надо. - при поиске проверить введенные слова на вхождение друг в друга. Т.е. по строке "абв абв бв" искать только "абв". 5) В зависимости от качества данных еще может иметь смысл конвертация символов, схожих по написанию к одному варианту. Например, буквы о-латинская, о-русская, цифра 0 часто выглядят одинаково, поэтому при поиске можно свести к одному. Если применять эту механику, то, конечно, и исходные данные нужно сконвертировать аналогично. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 20:32 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Alex_Ustinov помниться мне Вадя очень был рад что план в какой то версии показал что при like % используется индекс, но тема все та же, "можно ли ускорить да как ускорить...." ответ как и много лет назад - НЕ ИСПОЛЬЗОВАТЬ Like % ))) проверял я тогда на трех версиях MySQL - время совпадало что с "показом использовании индекса", что без него... а ВОЗ и ныне там... чтобы использовался индекс запрос нужно переписать Код: sql 1.
в вадином варианте индекс использоваться не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:18 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
mini.weblab чтобы использовался индекс запрос нужно переписать Код: sql 1.
в вадином варианте индекс использоваться не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:22 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
miksoft 1) в запросе добавить LIMIT 101. Если выбрано 100 или менее записей, то просто показывать их пользователю. Если выбрана 101 запись, то дополнительно говорить "найдено более 100 вариантов, уточните поиск". Или даже вообще только эту запись. Экономия в том, что если подходящих записей слишком много, то не сканировать всю таблицу, а бросить гораздо раньше. miksoft 2) Если количество найденных записей достаточно умеренное (заметно меньше исходного количества), то сохранять их где-либо (хоть в другой таблице, лучше IN-MEMORY) и при наборе следующего символа искать уже в этом наборе, а не в исходной таблице miksoft 4) Проверять ввод. - не делать поиск, если во введенной строке нет ни одного слова длиннее 2-3 символов. Т.е. по строке "а б в" поиск даже начинать не надо. - при поиске проверить введенные слова на вхождение друг в друга. Т.е. по строке "абв абв бв" искать только "абв". miksoft 5) В зависимости от качества данных еще может иметь смысл конвертация символов, схожих по написанию к одному варианту. Например, буквы о-латинская, о-русская, цифра 0 часто выглядят одинаково, поэтому при поиске можно свести к одному. Если применять эту механику, то, конечно, и исходные данные нужно сконвертировать аналогично. исхожу из того, что если есть подобное наименование - его правят и сохраняют как новый или исправленный, но без вредительсва miksoft А какое направление? miksoft Но для большинства направлений и 100 тысяч достаточно. miksoft В автозапчастях может быть и сильно больше, там ориентируйтесь на 20 миллионов. Но для большинства направлений и 100 тысяч достаточно. вопрос - при каком количестве наименований стоит переходить на другой продукт? я думаю что 20 лямов - это уже другой уровень. а до 1ляма - можно использовать эти 0.4 сек при 1 000 000 (не ощущаются с учётом количества) хотелось бы узнать области и количество наименований ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:33 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя miksoft 4) Проверять ввод. - не делать поиск, если во введенной строке нет ни одного слова длиннее 2-3 символов. Т.е. по строке "а б в" поиск даже начинать не надо. - при поиске проверить введенные слова на вхождение друг в друга. Т.е. по строке "абв абв бв" искать только "абв". Поиск по "абв абв бв" и "абв" даст одинаковый результат. Но в первом случае три LIKE-а, а во втором один. Хоть и небольшая, но экономия процессорного времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:45 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя вопрос - при каком количестве наименований стоит переходить на другой продукт? я думаю что 20 лямов - это уже другой уровень. а до 1ляма - можно использовать До 100 000 и LIKE справляется неплохо. Со средним диапазоном я как-то не сталкивался, точную границу не подскажу. У специализированного средства еще есть такой плюс, как учет морфологии. LIKE-ами это нереализуемо в принципе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:50 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
miksoft Поиск по "абв абв бв" и "абв" даст одинаковый результат. Но в первом случае три LIKE-а, а во втором один. Хоть и небольшая, но экономия процессорного времени. но идея хорошая. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:52 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
miksoft От MySQL отказываться не обязательно, но при нескольких миллионах имеет смысл использовать внешний поиск, тот же Сфинкс. miksoft У специализированного средства еще есть такой плюс, как учет морфологии. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:54 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Однозначно поддержу пункты про лимитирование результатов поиска и вынесение полнотекстового поиска из mysql. Добавлю, что нужно отправлять поисковый запрос на каждое изменение поисковой фразы. Имеет смысл вводить задержку, например, 500мс. Если поисковая фраза изменилась и за 500мс не было изменений - отправляем запрос. Идея - не долбить сервер запросами, пока пользователь печатает слово. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 08:15 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
можно перечитать темы, и копипастить оттуда 1. Как работает LIKE? 2. Ускорение LIKE '%str%' в версии 5.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 10:43 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
можно перечитать темы, и закопипастить оттуда, и отправить в Oracle, они же наверное не знают как у них там индекс работает ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 15:39 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
так тс 5 лет проблему решает однако ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 16:14 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
Дегтярев Евгений так тс 5 лет проблему решает однако ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 17:26 |
|
Можно ли ускорить и прочее..
|
|||
---|---|---|---|
#18+
вадя Alex_Ustinov сомневаюсь Я сейчас подниму свои скрипты, ты посмотри свои. сверимся по параметрам. у меня есть ПК на винде и я подниму любой скаченыый МайСкуль за 2 минуты максимум. Это я о том что ты сидишь на Дебе и не упорядочить-поднять два МайСкуля ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 17:59 |
|
|
start [/forum/topic.php?fid=47&fpage=22&tid=1828610]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 174ms |
0 / 0 |