Результаты поиска очень медленные при получении Varchar Records с использованием оператора like - PullRequest
2 голосов
/ 06 октября 2010

Адрес электронной почты совпадения ='@hotmail.com'

E-mail Поле ввода совпадений: Результаты 1199 - скорость возврата 40 секунд

Поле для адреса электронной почты не введено: Результаты 429 - скорость возврата 1,6 секунды

SELECT * FROM emails e where e.[From] like '%@hotmail.com%' OR e.[To] like '%@hotmail.com%'order by [id] DESC

Я должен использовать% в начале и в конце, потому что я хочу найти это в адресах электронной почты

Edit:

alt text

alt text

alt text

План выполнения исходного запроса

1 Ответ

1 голос
/ 06 октября 2010

Индексирование и статистика - это всегда первое, на что нужно обращать внимание при оптимизации производительности, но для более общего подхода к этому конкретному запросу:

Предложение OR фактически разделит запрос на два запроса.одну проверку для каждого критерия, выполните оба, а затем объедините результаты и отфильтруйте дубликаты.

Вы можете повысить производительность с помощью запроса, например

SELECT * FROM emails e
WHERE (e.From + '/' + e.To) LIKE '%@hotmail.com%'
ORDER BY id DESC

... хотя этонемного страшнее =) Попробуйте в своем анализаторе запросов и посмотрите, что работает лучше ...

РЕДАКТИРОВАТЬ

Как Мартин указал в комментариях, если поля обнуляютсяусловие WHERE должно быть обновлено, чтобы учесть следующее:

WHERE ( ISNULL(e.From,'') + '/' + ISNULL(e.To,'') ) LIKE '%@hotmail.com%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...