Порядок по индексируемому полю должен , а не быть медленным, поскольку он может извлекать данные в индексном порядке. Вы можете разместить информацию о структуре базы данных (DDL) и фактическом запросе, чтобы люди могли взглянуть.
Вы обязательно должны использовать сортировку SQL, а не сортировку кода, где это возможно, чтобы вы были на правильном пути.
UPDATE:
Хорошо, несколько вещей. Во-первых, вы не должны использовать конструкцию «+loadedModuleName +», поскольку она делает каждый запрос уникальным и портит оптимизатор. Используйте параметр. Во-вторых, ваше предложение Order by неоднозначно относительно того, является ли это таблицей A или B - сделайте это явным и выберите таблицу с индексом (даже если оба имеют индексы, сделайте это явным). Наконец, ваше «Предыдущее» поле все еще может быть проиндексировано даже как символ (1). Я бы сделал все, кроме последнего предложенного индекса, скорости тестирования и, если все еще медленно, пошел бы на индекс и проверил снова.
ОБНОВЛЕНИЕ Итак, вы будете возвращать <1000 записей, но каков размер таблицы в целом? </p>
ОБНОВЛЕНИЕ О, чувак, извини, я не уловил этого раньше. Если вы хотите правильно развернуть его на SQL Server, ваш запрос должен быть:
SELECT A.NAME, B.SYNTAX, B.DESCRIPTION, A.RATE1, A.RATE2, A.RATE3, A.STARTDATE, A.ENDDATE, A.HIDE, A.CATEGORYNAME
FROM Table1 A join Table2 B on (A.Name=B.Name)
WHERE (A.MODULENAME=@ModuleName) AND (A.PREVIOUS<>'N' OR A.PREVIOUS IS NULL)
ORDER BY A.NAME
Попробуйте, и я почти гарантирую, что вы увидите огромное ускорение.