|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяmaytonПокеж.дай набор данных сделаю демку. или могу выложть кусок кода который обрабатывает на сервере строку типа ыва ннн вааыв преобразует её для динамического запроса в хранимке и по ответу строит таблицу для выподающего списка Ну Окей. Возьми базу данных NorthWind. Она часто публикуется в тексте. И найди в ней "123". Но конечно хотелось-бы какое-то общее решение. Не для 1 таблички а для всех. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:08 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
maytonВ таблице могут быть не-текстовые поля. Числовые. Тоесть если я ищу СТРОКОВЫЙ символ через LIKE в числовом поле. То это всегда FALSE. Тождественный FALSE. Инвариант.как только дошёл до этого - понял, что с базами ты знаком очень отдалённо....... на примере mysql есть таблица Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
обрати внимание на поле UPCEAN bigint(20) DEFAULT NULL, делаю запрос Код: sql 1. 2. 3. 4.
возвращает "UPCEAN"121042104381210426216122000121042760012104273012104210444921121042006427031210427590512104247826312104221111211210429312104280009431210428001003121042800483312104280049031210428006433274871210425400832121042546060081210424820008121042482011121042854490001210426909756121042 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:27 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяесли ты ввёл 2 символа и вываливаешь всё что нашёл этот like- этот объём никому не нужен. поэтому и не смысла делать фулскан блин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:34 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
такой запрос Код: sql 1. 2. 3. 4. 5. 6.
вернёт "UPCEAN""Name"6909756121042"Фломастеры gmv 12шт gw258-12g" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:36 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
chpashaблин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к. что бы не быть голословным , сделал такой запрос Код: sql 1. 2. 3. 4. 5.
такого в поле однозначно нет да делает фуллл, но время 1.16сек для сравнения времени можете почитать 21670315 если ты сможешь предложить более оптимальны поиск - я применю ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:43 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадя, Ты вообще не читаешь то что я пишу. Я решаю задачу в рамках 1 интерфейса который я предложил. Ты решаешь другую задачу где есть 2 ключевых слова для поиска. Это не моя постановка. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:48 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
chpasha, да план запроса - сканирует все строки, но реально , при limit 5 будет намного меньше и время от 0 до 1.1сек. если ты сделаешь аналогичное на java - будет на много дольше. тут был недавно топик, где измеряли скорость - так вот .equals на порядок тормознее чем посимвольное сравнение ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:50 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяда делает фуллл, но время 1.16сек ну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормоза вадяесли ты сможешь предложить более оптимальны поиск я где-то уже выше писал, что по-моему нужно ориентироваться на конкретную задачу при выборе решения. Ну например в postgres (и наверняка много где еще) можно создавать индексы, которыми может воспользоваться движок при поиске по like. Если записей и пользователей совсем жуткое кол-во, а требования по эффективности достаточно строги - могут и сторонние решения понадобится для индексации данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:56 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
maytonТы вообще не читаешь то что я пишу. Я решаю задачу в рамках 1 интерфейса который я предложил. Ты решаешь другую задачу где есть 2 ключевых слова для поиска.1 ключевое поле для поиска - это бесполезно. к примеру есть контора, торгующая моющими средствами - там есть разные мылЫ одного хозяйственного дофига , если использовать для поиска ключевое слово хоз вывалится вес огромный список мыл + ещё куча того что относится к хозяйству... но достаточно ввести (к примеру ) вес куска 200 - будет список очень маленький - 1-3 строки ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:56 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
chpashaну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормозаэтот метод реально работал с 98 года - на том железе сколько может быть наименований у торгующей конторы? 100 000 ? 200 000? ежели 3 000 000 - то она спокойно может вложиться в хорошее железо. да надо ориентироваться на конкретную задачу - я здесь привожу цифры чтоб можно было ориентироваться хоть на что-то у меня была база в 28 000 наименований товара - и обычное железо - оценить быстродействие было практически не возможно - величины чисел терялись , практически(повторяюсь) данные вывыливались мгновенно, это с учетом того , что был полный цикл от ввода пользователем в браузере - сервер - субд - браузер... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:06 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяKorcarу меня запроса всего 4, а вопросов у тебя аж 6! чего спрашиваешь то? тебе наверное надо умерить аппетиты)у меня 1 запрос как ты насчитал 6? вадяKorcarв общем 4 запроса сделал. надеюсь годно получилось?????? сколько ты знаков вопроса поставил? варианты: 4, 6, другое ты еще и не читатель ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:10 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
Korcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:15 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяты у меня насчитал 6 запросов, как ты считаешь? он намекает, что в твоем сообщении шесть знаков "?" ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:17 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадязабыл никЭто как? Слезно попросить ДБ?не помню как в mssql, но в mysql есть Limit n top n в select ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:24 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
Лимит курсора есть почти во всех dbms. Но в данной задаче это ненужное 5 колесо. Оставьте его в покое. Подумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения. И как это закодить в рамках множества таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:30 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяKorcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь? 6 ВО просов. раскрой глаза ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:34 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
maytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд. если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать. maytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:41 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
Korcarу меня запроса всего 4, а вопросов у тебя аж 6!да не доглядел, но чем ты похвастался? что 4 запроса вместо 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:43 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяmaytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы Если-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируются никак и (почти!) никак не ускоряются. Можешь мне поверить я собаку скушал на этом. Мы на elastic переходили чтобы поднять перформанс некоторых вещей. Если текст курсора содержит выражение вида WHERE ... LIKE '%....%' и других предикатов нет - то данный план всегда будет содержать FTS. Исключение составляют - специфичные LIKE выражения где нет метасимвола с фронта (например LIKE 'бла%'). В этом случае индекс на основе Б+Дерева может быть использован. Во всех остальных кейсах - нет. - проприетарные технологии в Oracle (OracleText (CTX_CAT...)) при условии что в таблице 1 единственное поле и оно стоит под этим доменным индексом. - проприетарные технологии PostgreSQL, MySQL, MS-SQL которые поддерживают индексы текстового поиска. Беря во внимание мой Java-интерфейс и мою постановку вероятность этих специфичных кейсов практически равна нулю. И затачивать под них генерализованный Jdbc поиск я не хочу. Беря во внимание что никто не хочет искать выражение 'бла%' а все хотят искать выражение в любой части документа данная LIKE оптимизация нам не поможет. Сюда-же до кучи функциональные индексы. Ускорить FTS под Oracle можно для крупных partitioned таблиц при использовании hint +PARALLEL(n) в n процессов по аналогии c фьючерсами в java. Для этого почти ничего не надо делать только детектировать тип DBMS (через DatabaseMetadata) и активировать хинт. Опять-же для данной задачи КМК важнее чтобы она работала концептуально правильно а уже всякие тюнинги можно сделать потом как плагины изменяющие оригинальный текст запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 15:17 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяmaytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд. если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать. Ну всё таки. Ты ПОНИМАЕШЬ зачем вообще в Java есть интерфейс Iterator? В чем его назначение? Зачем вообще он выделен в отдельную сущность? Почему иерархия коллекций не завершилась на уровне List? Почему я настаиваю именно на Iterator а не сделал просто List? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 15:23 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
maytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы. я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом. и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи. я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему. поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 15:35 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
вадяmaytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы. я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом. и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи. я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему. поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый. Человек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст. Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно. А важно то что текстовый поиск имеет другую (не-реляционную) природу. И в данном моём хакатоне я предложил его реализовать если кто осилит. Впрочем я думаю что я перефразирую тему и форкну ее отдельным топиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 15:56 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
mayton, Итератор служит чисто для перебора по кортежу. Т.е. этап формирования и фильтров уже пройден. Или у тебя итератор по полям тоже? Т.е. это пол задачи. Вадя говорит о первой части, а итератор это потом синтаксический сахар подкачки записей как в гугле. А для вади любой ООП это прокладки. Бесполезен спор. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 16:29 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
maytonЧеловек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст. Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.я уже показал что происходит при поиске с помощью like в числовом поле - оно преобразуется в текстовое если мне надо найти в нескольких полях некоторые из которых числовые , я воспользуюсь (буду говорить о mysql т.к. последнее время только с ней и работаю) оператором concat_ws(' ' , поле1, поле2...) любое числовое поле попав в этот оператор превращается в строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 16:32 |
|
JDBC необязательные параметры
|
|||
---|---|---|---|
#18+
Petro123Итератор служит чисто для перебора по кортежу. Т.е. этап формирования и фильтров уже пройден. вот тут вообще непонятки если уже отбор в базе пройден зачем в итератор? чтоб потом из итератора фильтровать? или сделать пагинацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 16:37 |
|
|
start [/forum/topic.php?fid=59&msg=39702132&tid=2121789]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 179ms |
0 / 0 |