Я не уверен насчет других баз данных, но для SQL Server я рекомендую план выполнения. Он очень четко (хотя и с большим количеством вертикальной и горизонтальной прокрутки, если у вас нет 400-дюймового монитора!) Показывает, какие шаги вашего запроса затягивают время.
Если у вас есть один шаг, который занимает сумасшедшие 80%, то, возможно, можно было бы добавить индекс, а после настройки индекса перезапустите план выполнения, чтобы найти ваш следующий самый большой шаг.
После нескольких настроек вы можете обнаружить, что на самом деле нет никаких шагов, которые бы выделялись среди других, то есть все они по 1-2%. Если это так, то вам, возможно, потребуется выяснить, есть ли способ сократить объем данных, включенных в ваш запрос, включить ли эти четыре миллиона закрытых заказов в запрос «Активные заказы на продажу». ? Нет, поэтому исключите всех, у кого STATUS = 'C' ... или что-то в этом роде.
Еще одно улучшение, которое вы увидите в плане выполнения, - это поиск по закладкам, в основном он находит совпадение в индексе, но затем SQL Server должен быстро просмотреть таблицу, чтобы найти нужную запись. Эта операция может иногда занимать больше времени, чем простое сканирование таблицы, если это так, нужен ли вам этот индекс?
В случае индексов, и особенно в SQL Server 2005, вам следует обратиться к предложению INCLUDE, это в основном позволяет вам иметь столбец в индексе, фактически не входя в индекс, поэтому если все данные, необходимые для запроса, находятся Ваш индекс или является включенным столбцом, тогда SQL Server не нужно даже смотреть на таблицу, что значительно повышает производительность.