Всегда убедитесь, что у вас есть индексы в ваших таблицах. Не слишком много и не слишком мало.
Используя sql server 2005, примените включенные столбцы в этих индексах, они помогают при поиске.
Порядок сортировки является дорогостоящим, если не требуется, зачем сортировать таблицу данных, если она не требуется.
Всегда фильтруйте как можно раньше, если вы уменьшите количество объединений, вызовов функций и т. Д., Как можно раньше, вы сократите время, затрачиваемое на все
- избегайте курсоров, если можете
- использовать временные таблицы / таблицы переменных для
фильтрация, где это возможно
- удаленные запросы обойдутся вам
- запросов с суб
выбирает в предложении, где может быть
hurtfull
- Табличные функции могут быть дорогостоящими, если нет
фильтруется
как всегда, нет строгого правила, и все должно приниматься на основе запроса.
Всегда создавайте запрос как можно более понятным / читабельным и оптимизируйте его при необходимости.
РЕДАКТИРОВАТЬ, чтобы прокомментировать вопрос:
Временные таблицы могут использоваться, когда вам требуется добавить индексы для временной таблицы (вы не можете добавлять индексы для таблиц var, кроме pk). В основном я использую таблицы переменных, когда могу, и в них есть только обязательные поля
DECLARE @Table TABLE(
FundID PRIMARY KEY
)
Я бы использовал это, чтобы заполнить свои идентификаторы группы фондов вместо того, чтобы объединять таблицы, которые менее оптимизированы.
Я прочитал пару статей на днях и, к своему удивлению, обнаружил, что таблицы var фактически создаются в базе данных tempdb
текст ссылки
Кроме того, я слышал и обнаружил, что таблицы UDF могут показаться «черным ящиком» планировщику запросов. Еще раз, мы склонны перемещать селекторы из табличных функций в табличные переменные, а затем объединять их в этих таблицах переменных. Но, как упоминалось ранее, сначала напишите код, а затем оптимизируйте, когда найдете узкие места.
Я обнаружил, что CTE могут быть полезны, но также и то, что когда уровень рекурсии растет, он может быть очень медленным ...