SQL 'ORDER BY' медлительность - PullRequest
       27

SQL 'ORDER BY' медлительность

11 голосов
/ 02 апреля 2009

Правда ли, что ORDER BY обычно довольно медленный? Я пытаюсь запустить некоторые операторы sql, где предложение WHERE довольно просто, но затем я пытаюсь ORDER BY в VARCHAR(50) индексированном столбце.

Мне нужно отсортировать по алфавиту по причинам отображения. Я подумал, что заставить базу данных сделать это для меня наиболее эффективно.

На данный момент, я ищу либо

  • оптимизировать SQL-запрос
  • отсортировать набор результатов в коде

Вот фактический запрос, который я пытаюсь выполнить:

// B.SYNTAX is a TEXT/CLOB field
// Indexes on NAME, MODULENAME. PREVIOUS is a CHAR(1) with no index
"SELECT A.NAME, B.SYNTAX, B.DESCRIPTION, A.RATE1, A.RATE2, 
A.RATE3, A.STARTDATE, A.ENDDATE, A.HIDE, A.CATEGORYNAME 
FROM A, B WHERE A.MODULENAME='"+loadedModuleName+"' 
AND A.NAME = B.NAME AND (A.PREVIOUS<>'N' OR A.PREVIOUS IS NULL) 
ORDER BY A.NAME"

Размер таблицы A составляет ~ 2000 строк, а B - ~ 500.

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

Я ожидаю, что будут возвращены сотни записей (менее 1000).

Что бы вы сделали? Любые советы приветствуются. Спасибо.

Ответы [ 14 ]

0 голосов
/ 02 апреля 2009

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

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

Ответы на следующие вопросы могут помочь пойти дальше:

  • Сколько строк возвращено запрос?
  • Сколько столбцов выбирается?
  • Вы объединяетесь с какими-либо столами?
  • Сколько времени занимает с / без ЗАКАЗАТЬ ПО?
0 голосов
/ 02 апреля 2009

ORDER BY заставляет СУБД сортироваться.

Для сортировки требуются ресурсы, которые могут отсутствовать на вашем сервере RDBMS.

В некоторых случаях (например, запросы к одной таблице) вы можете написать ORDER BY, который соответствует индексам - и если ваша СУБД гарантирует, что таблицы хранятся в порядке индекса - это может быть нулевой стоимостью. [Конструкция БД, которая зависит от множества запросов к одной таблице, может быть еще более улучшена путем отказа от СУБД и использования файлов.]

Как правило, ORDER BY придется сортировать.

«Я подумал, что заставить базу данных сделать это для меня - это самое эффективное».

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

0 голосов
/ 02 апреля 2009

Здесь лот проблем в игре.

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

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

С другой стороны, здесь нужно рассмотреть больше, чем просто производительность. Вы также хотите думать о будущем обслуживании. Что может быть более удобным, чем простое предложение "ORDER BY"? Это всего лишь одна строка кода, по сравнению с тем, кто знает, сколько еще нужно программисту, чтобы заставить работу работать в другом месте. Это может быть тот случай, когда вам лучше потратить немного денег на решение этой проблемы, чтобы убедиться, что ваша база данных просто поддерживает приемлемый уровень производительности, сортировки и все такое.

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

0 голосов
/ 02 апреля 2009

Неправильно утверждать, что «заказ по» медленен сам по себе. У вас есть много RDBM, которые нужно учитывать, как их собственную реализацию, так и тип данных и схему индексации. Я, однако, сомневаюсь, что вы можете сортировать его быстрее на стороне клиента, чем на сервере, но это не значит, что сортировка на сервере - правильная вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...