Запись набора результатов в файл с отсортированным выводом

Я хочу поместить "случайный" вывод из моего набора результатов (около 1,5 миллионов строк) в файл в отсортированном виде. Я знаю, что могу использовать сортировку по команде в моем запросе, но эта команда «дорогая». Можете ли вы сказать мне, есть ли какой-либо алгоритм для записи строк набора результатов в файл, чтобы содержимое было отсортировано в конце, и могу ли я повысить производительность с помощью этого? Я использую java 1.6, и запрос имеет несколько объединений.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 756
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Определите индекс для критериев сортировки в своей таблице, после чего вы сможете без проблем использовать предложение order by и записать файл в том виде, в котором он поступает из набора результатов.

Если ваш запрос имеет несколько объединений, создайте правильные индексы для объединений и критериев сортировки. Вы можете сортировать данные в своей программе, но вы зря теряете время. Это время будет намного ценнее, если вы научитесь правильно настраивать / использовать вашу базу данных, а не изобретать заново алгоритмы сортировки, уже имеющиеся в ядре базы данных.

Возьмите профилировщик своей базы данных и проверьте план выполнения запроса.

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

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

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

Очень маловероятно, что вы сможете сопоставить уровень оптимизации, заложенный в ваш движок БД; но если ваша проблема возникает из-за того, что вы выполняете некоторую постобработку данных, которая сводит на нет любую сортировку, выполняемую БД, тогда у вас нет альтернативы, кроме сортировки ее самостоятельно.

Опять же, проще всего было бы использовать БД: просто записать во временную таблицу с соответствующим индексом и выгрузить оттуда.

Если вы уверены, что данные всегда будут помещаться в ОЗУ, вы можете отсортировать их в памяти. Это единственный случай, когда вы мощь сможете превзойти движок БД только потому, что знаете, что вам не понадобится HD-доступ.

Но это много «если». Лучше оставайся со своей БД

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

Vinko Vrsalovic 08.10.2008 14:28

Если вам нужно отсортировать данные, это должен сделать кто-то - вы или база данных. Конечно, проще добавить ORDER BY в запрос. Но нет причин, по которым вы не можете отсортировать это в памяти на своей стороне. Самый простой способ - разбить данные в отсортированной коллекции (TreeSet, TreeMap) с помощью компаратора для сортировки по нужному столбцу. Затем выпишите отсортированные данные.

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

Vinko Vrsalovic 09.10.2008 05:03

Другие вопросы по теме