Быстрее ли использовать сложное логическое значение для ограничения ResultSet на стороне MySQL или на стороне Java? - PullRequest
3 голосов
/ 25 апреля 2010

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

Это вообще быстрее сделать:

SELECT (column1, column2, ... , columnN) FROM table WHERE (some complicated boolean clause);

и затем используйте ResultSet, или это быстрее сделать:

SELECT (column1, column2, ... , columnN) FROM table;

и затем выполнить итерацию по ResultSet, принимая разные строки на основе Java-версии вашего логического условия?

Я думаю, что все сводится к тому, является ли итератор / булев оценщик Java более быстрым, чем булев оценщик MySQL.

Ответы [ 4 ]

13 голосов
/ 25 апреля 2010

Почти наверняка быстрее отправить условие в базу данных.

  • Вы избегаете переноса большого количества строк, данные которых вам не нужны.
  • База данных может использовать что-то быстрее, чем сканирование таблицы. Он может использовать индекс, который позволяет ему быстрее находить интересные строки, не проверяя условия в каждой строке.
4 голосов
/ 25 апреля 2010

Я думаю, что все сводится к тому, Java итератор / логический оценщик быстрее, чем логическое MySQL оценщик.

Нет. Решающим фактором почти наверняка будет объем данных, которые должны быть переданы по сети (и разные накладные расходы). Уменьшение размера результирующего набора на сервере БД - это правильное решение в 99% случаев. Это особенно верно для сложных запросов, где это может привести к меньшим объединениям.

3 голосов
/ 25 апреля 2010

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

1 голос
/ 25 апреля 2010

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

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

...