2014-11-18 3 views
-1

У меня есть запрос выбора, который извлекает огромное количество данных на основе некоторых объединений с другими таблицами, и все таблицы используются другими процессами (некоторые из них записывают данные в эти таблицы, а некоторые извлекают из них). Одновременные операции помещают блокировки в таблицы.Оптимизировать выбор Производительность запроса, которая соединяется с различными другими таблицами в MS SQL

Есть ли какой-либо способ в запросе выбора, который может оптимизировать время отклика запроса, даже если в таблице есть запись/Общая блокировка? Может «С (NOLOCK)» с помощью таблицы?

Благодаря Манодж

ответ

0

Вы можете попробовать эти варианты слишком
- Удалить ненужный левый присоединяется
- Удалить, где положение, если оно может быть использовано вместе с Inner условия соединения - Может создавать индексы на столбцах - Выберите нужные столбцы, избегать использования * для всех столбцов - Избегайте давать большие длины для ваших колонок

+0

Спасибо за ваши предложения. Мы можем разобраться в проблеме и решении. –

0

С (NOLOCK) улучшит производительность, но это даст вам грязное чтение, которые еще не совершили. Idealy это не рекомендуется в транзакционных таблицах, если вы в порядке с этим грязным чтением, вы можете использовать его,

И другие оптимизации, как поддерживать правильные индексы на столбцах таблиц, которые используются в соединениях. а другая точка объединяет таблицы от маленьких до больших в данных и вызов fucntion в предложении select и where where.

надеюсь, что это вам поможет!

+2

Фактически NOLOCK НЕ ТОЛЬКО дает ему грязные чтения, он может возвращать данные дважды. Nolock также игнорирует блокировки во время разметки страницы индекса. Как правило, большой «нет, никогда не используйте», за исключением таблиц только для чтения. – TomTom

+0

Спасибо Saketh, у меня есть соединения с соответствующими столбцами индексов con. Надеюсь, это поможет мне. Спасибо –