Который является более дорогим? Для цикла или вызова базы данных?

Я думаю, что Вашим решением был бы стандартный путь, но - поскольку Вы отметили себя - это - вероятно, не самый быстрый возможный путь.

можно посмотреть Находка GNU . Это - библиотека, которая содержит все виды быстрых примитивных Наборов. Ваш пример использовал бы TObjectIntHashMap, который имеет метод adjustOrPutValue, который делает точно, что Вы хотите.

22
задан benjy 7 September 2009 в 19:53
поделиться

7 ответов

В общем, чем реже вы обращаетесь к базе данных, тем лучше. Для этого есть ряд причин, в том числе:

  • База данных сможет лучше оптимизироваться, если сможет попытаться получить все сразу.
  • Вы удаляете все накладные расходы, связанные с многократным взаимодействием с базой данных, что может быть весьма значительным
46
ответ дан 29 November 2019 в 03:43
поделиться

В общем, все, что выполняется в памяти (цикл for), выполняется быстрее, чем то же самое, выполняемое по сети (вызов базы данных). Однако:

for i = 1 to num_users
    get user from database
end

будет медленнее, чем

get users 1 to num_users from database (in one query)

, потому что это число раз, когда вы запрашиваете у базы данных что-то действительно важное.

9
ответ дан 29 November 2019 в 03:43
поделиться

Если вы собираетесь обрабатывать каждый элемент, просто сделайте один вызов, если он не будет использовать возмутительное количество объем памяти.

3
ответ дан 29 November 2019 в 03:43
поделиться

Я не видел плагинов, которые бы это делали, но мне это кажется разумным сокращением.

Следующее могло формируют основу плагина для создания класса непосредственно из выбранного интерфейса. Он работает с моим ящиком (TM).

В настоящее время предполагается, что класс примет имя интерфейса с суффиксом «Impl» и не работает (записывая причину), если этот тип уже существует.

Некоторые улучшения, о которых я могу подумать:

  • разрешить выбор нескольких интерфейсов
  • определить страницу предпочтений для суффикса реализации и имени пакета
  • открыть диалог со значениями, заполненными, если реализация «по умолчанию» уже существует.

Плагин добавляет команду к контекстное меню для редакторов, представлений и выделения текста, отключение элемента, если выделение не соответствует интерфейсу. Вызов базы данных обычно включает передачу данных по локальной сети или, что еще хуже, через Интернет. запрос должен анализироваться каждый раз и т. д.

Но если у вас есть тысячи или миллионы элементов, которые просматриваются в одном запросе к базе данных, то запрос sql будет намного быстрее, поскольку системы баз данных оптимизированы для обработки огромных объемы данных. Но не забывайте создавать индексы для своих таблиц.

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

3
ответ дан 29 November 2019 в 03:43
поделиться

Попробую: вызовы DB, скорее всего, будут дороже. По крайней мере, это то, что я испытал до сих пор ...

2
ответ дан 29 November 2019 в 03:43
поделиться

Я думаю, это зависит от того, что вы делаете. В вашем заявлении недостаточно информации.

Приведенные выше ответы верны, чем меньше вы обращаетесь к базе данных, тем лучше (обычно). Поэтому вам следует попытаться выполнить определенную операцию за как можно меньше вызовов базы данных. Единственное исключение из этого, я думаю, будет в тех случаях, когда ваше приложение быстрее, чем база данных, возможно, при выполнении сложных преобразований данных или при использовании очень неэффективной базы данных.

Обычно, позволяя базе данных выполнять преобразование данных в форма set обычно выполняется быстрее, чем выполнение их программно с использованием курсора в цикле for. Если это не то, что вам знакомо, я предлагаю выучить немного больше SQL или получить хорошую книгу с практическими рекомендациями, например SQL Cookbook (примечание: я не связан с O'Reilly,

0
ответ дан 29 November 2019 в 03:43
поделиться

В целом, чем меньше вы обращаетесь к базе данных, тем лучше.

2
ответ дан 29 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

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