Когда sql отличный быстрее, чем Java, программирующий 'отличный'

Просто добавьте свойство AdjustViewBounds в ImageView.

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/image_border"
        android:padding="1dp"
        android:adjustViewBounds="true"
        android:src="@drawable/test_image" />

Пожалуйста, обратите внимание, что android:adjustViewBounds="true" работает только с android:layout_width и android:layout_height, установленными в «wrap_content».

8
задан OMG Ponies 3 October 2009 в 20:02
поделиться

9 ответов

Практическое правило состоит в том, что данные быстрее обрабатываются в базе данных, чем на вашем языке программирования.

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

  • маршалинг данных для драйвера из базы данных;
  • передача по сети;
  • демаршаллинг данных от драйвера к приложению;

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

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

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

25
ответ дан 5 December 2019 в 04:33
поделиться

Два основных аспекта:

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

Я был бы очень удивлен чтобы обнаружить, что выборка всех данных и последующее выполнение отдельной операции на Java было быстрее, чем выполнение этого в базе данных.

11
ответ дан 5 December 2019 в 04:33
поделиться

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

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

6
ответ дан 5 December 2019 в 04:33
поделиться

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

3
ответ дан 5 December 2019 в 04:33
поделиться

В мои дни, когда животные все еще разговаривали и играли в игры на своих атари, создание ненужного сетевого трафика было ПЛОХО ПЛОХО.

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

Примечание: это не то же самое, что сказать «делать все на сервере», манипулирование данными в среде с большей поддержкой манипулирования данными может быть хорошим делом. Только не запрашивайте больше данных, чем вам нужно (кеширование как заметное исключение)

3
ответ дан 5 December 2019 в 04:33
поделиться

Oracle 9 и Oracle 10 выполняют отдельные операции по-разному, Oracle 9 сортирует, Oracle 10 хеширует. Возможно, что в некоторых отдельных случаях Java может делать это быстрее, чем Oracle 9, но медленнее, чем Oracle 10.

Я думаю, что в целом Oracle может делать это быстрее. См. Ответ Джона Скита.

2
ответ дан 5 December 2019 в 04:33
поделиться

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

1
ответ дан 5 December 2019 в 04:33
поделиться

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

Это помимо основной проблемы здесь, которая заключается в количестве передаваемых данных. по трубам (как было несколько раз здесь сказано).

1
ответ дан 5 December 2019 в 04:33
поделиться

Отдельный SQL "тяжелый", потому что он должен исключать множественные вхождения. Этого можно достичь, сначала отсортировав данные, а затем исключив прогоны с одинаковыми элементами. Тяжелость связана с тем фактом, что выполнение этой операции обходится дорого.

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

0
ответ дан 5 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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