Подсказки и Приемы об оптимизации запросов [SQL Server 2005]

Я задаю этот вопрос в stackoverflow, потому что это - правильное место для выяснения...

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

Для молодых разработчиков как я могло бы быть полезно знать об оптимизации запросов..

Некоторые Подсказки и Приемы об оптимизации запросов в SQL Server 2005..

7
задан 5 revs, 3 users 96% 18 July 2013 в 19:49
поделиться

4 ответа

На основании вопросов здесь

  • Избегайте приоритета DataType (например, всегда очень похоже на вроде, включая длину varchar ETC)

Например,

...WHERE tinyintcol = @intvalue
 means a conversion of the column and invalidates an index
...WHERE tinyintcol = @tinyintvalue
  • Избегайте функций на столбцах в том, где пункты

, например,

 ...WHERE DATEADD(day, 1, MyCol) > GETDATE()
 should be
 ...WHERE MyCol > DATEADD(day, -1, GETDATE())
  • , покрывающие индексы

  • GUID: не кластеризованные индексы

2
ответ дан 7 December 2019 в 12:20
поделиться

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

1
ответ дан 7 December 2019 в 12:20
поделиться
  • Постарайтесь уменьшить ваше общее количество соединений, если это возможно
  • Рассмотрим размеры таблицы, используемые в запросе
  • , используют индексы, поскольку они ваш друг
  • Следите за типы, которые вы Используются в качестве клавиш (int int int - это гораздо более легкое сравнение, чем два варгача)
  • Избегайте использования запросов «как», где это возможно, попробуйте получить значение, используя равенство в первую очередь
1
ответ дан 7 December 2019 в 12:20
поделиться

(Использование ABCDE Для представления китайских иероглифов для простоты)

Допустим, вы получили «предложение» ABCDE ввод, и ваш Словарь содержит эти слова, которые начинаются с A : AB , ABC , AC , Ae , а Abb . И предполагаю, что слово CDE существует, но de , ни E не.

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

Структура с помощью этих результатов, захватив следующих нескольких символов из входной строки, чтобы получить правильное сравнение:

AB  ?= AB : True
ABC ?= ABC: True
AC  ?= AB : False
AE  ?= AB : False
ABB ?= ABC: False

в данный момент программные вилки вниз по двум «настоящим» веткам. На первом, он предполагает AB - это первое слово, и пытается найти C . CDE найден, так что ветвь возможна. Вниз по другой ветви, ABC - это первое слово, но de невозможно, так что ветвь недействительна, что означает, что первая должна быть истинная интерпретация.

Я думаю, что этот метод минимизировал количество вызовов в базу данных (хотя оно может вернуть большие наборы из базы данных, так как вы получаете наборы слов, которые начинаются с одного и того же символа). Если ваша база данных была проиндексирована для такого рода поиска, я думаю, что это будет работать лучше, чем за счет письма. Глядя на весь этот процесс, а другие ответы, я думаю, что это на самом деле это структура TRIE (при условии, что символ обыскал, является корнем дерева), поскольку был предложен еще один плакат. Ну вот реализация этой идеи!

-121--3500280-

Для запросов я могу добавить в GBN , рекурсивный и Smaclell Последующие:

  • Попробуйте минимизировать подзагрузки, Присоединения
  • Избегайте избыточных блокировков, сохранение контрольных точек
  • Использовать прагмас, чтобы установить создание Temp Table в памяти
  • Использовать прагмас для установки синхронного выключения
  • Использовать прагмас для отключения триггеров (если это возможно)
  • встроен Вставьте и Удалить Запросы в транзакциях
  • Иногда Обновление - медленнее для нескольких записей, чем просто вставлять их снова. Таким образом, рекомендуется выбрать, удалить, чем программно обновлять записи и повторную вставку с существующими ключами (остерегайтесь каскада и триггеров )
  • Проверьте со своими администратами SYS, что Кэш БД должен быть на
1
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: