Я избегаю коррелированных подзапросов (некоррелированные подзапросы и производные таблицы в порядке) и любые курсоры, которых я могу избежать. Также избегайте, когда вы можете делать петли. Подумайте о наборах данных, а не о строковой обработке.
Если вы используете UNION, проверьте, будет ли работать UNION ALL. Существует потенциальная разница в результатах, поэтому убедитесь, что перед внесением изменений.
Я всегда смотрю на слово DISTINCT как подсказку, чтобы увидеть, есть ли лучший способ представить данные. DISTINCT является дорогостоящим по сравнению с использованием производной таблицы или каким-либо другим способом, чтобы избежать его использования.
Избегайте синтаксиса подразумеваемого соединения, чтобы избежать случайного перекрестного соединения (которое люди часто фиксируют, содрогаются, с четкими). (Создание списка из 4 миллионов записей, а затем отличных для получения трех, которые вы хотите, является дорогостоящим.)
Избегайте просмотров, которые вызывают другие мнения! У нас есть люди, которые разработали целую клиентскую базу данных таким образом, и производительность УЖАСНАЯ! Не спускайся по этому пути.
синтаксис Избегайте как WHERE MyField Как «% тест%»
что и другие не saragable где положения могут держать оптимизатор от использования индексов.
Собственно, 'NOT IN' не обязательно так плохо; если у вас есть нужные индексы, он превращается в анти-соединение, которое работает лучше, чем версия «LEFT JOIN'-' NULL ». – Aaronaught
Я слышал, что утверждение «SELECT» довольно плохое, и его следует избегать. –
запрос всегда может работать быстрее, если вы добавляете - перед каждой строкой ... – corymathews