Russian Qt Forum
Сентябрь 30, 2024, 14:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос оптимизации  (Прочитано 5428 раз)
deis
Гость
« : Октябрь 04, 2010, 19:01 »

Есть некий алгоритм поиска заданного значения, а вопрос, собственно, следующий. Что будет быстрее - искать значение непосредственно в данных QSqlQuery через seek() и value(int) или предварительно выгрузить данные в QList<Type> и искать уже через него?

При этом число операций сравнения при поиске существенно больше объёма данных, полученных в запросе, т.к. многократно ищутся разные значения в одном и том же наборе данных. Отсюда вполне возможно, что задержка, связанная с выгрузкой в QList, плюс время поиска в нем окажутся меньше, чем непосредственный поиск в данных QSqlQuery - при условии, конечно, что поиск в последнем заметно медленнее, чем в данных QList
« Последнее редактирование: Октябрь 04, 2010, 20:11 от deis » Записан
Astrologer
Гость
« Ответ #1 : Октябрь 04, 2010, 19:36 »

Что значит есть некоторый алгоритм поиска? Что за алгоритм? От него очень много зависит. И алгоритмов поиска куча. И выгружать тогда уже в QMap or QHash, в контейнеры оптимизированные для поиска, в которых время поиска амортизированное. ИМХО, если данных не очень много - не заморачивайся и ищи с seek().

http://doc.trolltech.com/4.4/containers.html#algorithmic-complexity
Записан
deis
Гость
« Ответ #2 : Октябрь 04, 2010, 19:47 »

Алгоритм здесь совершенно не при чем - он одинаков в обоих случаях. Я уже померил - обращение к данным через QList (функция at()) в пределе будет примерно в пять раз быстрее, чем через QSqlQuery (соответственно, функции seek() и value()). Поэтому если число обращений к содержащимся в выборке данным значительно превышает ее размер, то целесообразнее выгружать данные сначала в QList, а затем уже выбирать из него...
Записан
Astrologer
Гость
« Ответ #3 : Октябрь 04, 2010, 19:56 »

Вот и ответ на ваш вопрос. Улыбающийся Не совсем понял - то есть алгоритм поиска не влияет на скорость поиска?
Записан
deis
Гость
« Ответ #4 : Октябрь 04, 2010, 20:03 »

Собственно алгоритм поиска никак не влияет на скорость извлечения из выборки отдельных ее элементов - конечно, если используется один и тот же метод доступа к данным, а вопрос был именно о сравнении скоростей различных методов доступа к элементам выборки - для одного и того же алгоритма
« Последнее редактирование: Октябрь 04, 2010, 20:04 от deis » Записан
crossly
Гость
« Ответ #5 : Октябрь 04, 2010, 20:10 »

быстрее будет
Код:
select ... from <table> where value in (....)
Записан
deis
Гость
« Ответ #6 : Октябрь 04, 2010, 20:16 »

У меня поиск по многим значениям, а фактически по всем, встречающимся в выборке - и не по одному разу (этот факт учитывается), при этом число обращений к ней многократно превышает ее размер. В данном случае единственное оптимальное решение - загрузить всю выборку сразу за один запрос, а потом уже в ней ковыряться...
« Последнее редактирование: Октябрь 04, 2010, 20:27 от deis » Записан
Kolobok
Гость
« Ответ #7 : Октябрь 04, 2010, 20:56 »

Поиск в базе будет быстрее.
Записан
deis
Гость
« Ответ #8 : Октябрь 04, 2010, 21:21 »

Это не имеет отношения собственно к теме вопроса, но в данном случае это не совсем так, поскольку алгоритм поиска оптимизирован под структуру данных. Грубо говоря, из 100 элементов выборки 90 имеют одно и тоже значение, остальные распределяются более-менее равномерно, поэтому повторный поиск осуществляется уже не среди исходных данных как таковых, а среди данных, описывающих их распределение, к тому же и база далеко не localhost. Естественно, данные отбираются из нее в отсортированном по необходимому признаку виде, поэтому и первоначальный поиск - это далеко не тупой перебор и даже не половинное деление. Как-то так...
Записан
Astrologer
Гость
« Ответ #9 : Октябрь 05, 2010, 19:55 »

=) новый алгоритм поиска? Поделитесь?
Записан
deis
Гость
« Ответ #10 : Октябрь 06, 2010, 19:12 »

Алгоритм прост до безобразия, самое главное - правильная организация хранения исходных данных в самой базе данных...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 21.