Я должен использовать Подсказку Запроса Быстрый number_rows / FASTFIRSTROW?

Адреса электронной почты, которые я хочу проверить, будут используемыми веб-приложением ASP.NET с помощью Системы. Сеть. Почтовое пространство имен для отправки электронных писем списку людей. Так, вместо того, чтобы использовать некоторое очень сложное регулярное выражение, я просто пытаюсь создать экземпляр MailAddress из адреса. MailAddress construtor выдаст исключение, если адрес не будет сформирован правильно. Таким образом, я знаю, что могу, по крайней мере, внедрить электронную почту. Конечно, это - проверка серверной стороны, но как минимум Вам нужно это так или иначе.

protected void emailValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
    try
    {
        var a = new MailAddress(txtEmail.Text);
    }
    catch (Exception ex)
    {
        args.IsValid = false;
        emailValidator.ErrorMessage = "email: " + ex.Message;
    }
}
6
задан Will Shaver 20 August 2009 в 21:35
поделиться

3 ответа

При использовании TOP x нет никакой пользы от использования OPTION FAST x . Оптимизатор запросов уже принимает решения в зависимости от того, сколько строк вы извлекаете. То же самое касается тривиальных запросов, таких как запрос определенного значения из уникального индекса.

Кроме этого, OPTION FAST x может помочь, когда вы знаете, что количество результатов равно вероятно, ниже x , но оптимизатор запросов этого не делает. Конечно, если оптимизатор запросов выбирает плохие пути для сложных запросов с небольшим количеством результатов, может потребоваться обновление вашей статистики. И если вы угадаете неверно x , запрос может занять больше времени - почти всегда есть риск при подсказках.

Приведенный выше оператор не тестировался - возможно, что все запросы выполняются столько же, если не дольше. Быстро получить первые 10 строк - это здорово, если есть только 8 строк, но теоретически запрос все равно должен выполняться полностью до завершения. Я думаю, что преимущество может заключаться в том, что выполнение запроса идет по другому пути , ожидая на меньше итоговых записей, хотя на самом деле он действительно пытается получить первые x ] Быстрее. Эти два типа оптимизации могут не совпадать.

m мышление может иметь место, потому что выполнение запроса идет по другому пути , ожидая меньше итогов записей, хотя на самом деле он действительно пытается получить первые x быстрее. Эти два типа оптимизации могут не совпадать.

m мышление может иметь место, потому что выполнение запроса идет по другому пути , ожидая меньше итогов записей, хотя на самом деле он действительно пытается получить первые x быстрее. Эти два типа оптимизации могут не совпадать.

2
ответ дан 8 December 2019 в 05:22
поделиться

Подсказка FAST имеет смысл только в сложных запросах, где есть несколько альтернатив, из которых оптимизатор может выбрать. Для простого запроса, такого как ваш пример, это ни с чем не помогает, оптимизатор запросов сразу определит, что существует тривиальный план (поиск в индексе идентификатора, имя поиска, если оно не покрывает), чтобы удовлетворить запрос и перейти к нему. Даже если для идентификатора не существует индекса, план остается тривиальным (вероятно, кластерное сканирование).

Чтобы дать пример, в котором может быть полезен FAST, рассмотрим соединение между A и B с ограничением ORDER BY. Скажем, при оценке соединения B сначала и вложенных циклов A соблюдается ограничение ORDER BY, поэтому будут получены быстрые результаты (SORT не требуется), но это более затратно из-за количества элементов (B имеет много записей, соответствующих WHERE, а A - несколько). С другой стороны, оценка первого B и вложенного цикла A создаст запрос, который выполняет меньше операций ввода-вывода, следовательно, в целом быстрее, но результат должен быть отсортирован в первую очередь, и SORT может начаться только после оценки соединения, так что первый результат придет очень поздно. Оптимизатор обычно выбирает второй план, потому что он в целом более эффективен. Подсказка FAST заставит оптимизатор выбрать первый план, потому что он дает результаты быстрее.

20
ответ дан 8 December 2019 в 05:22
поделиться

Для этого конкретного запроса, конечно, нет! Будет возвращена только одна строка - строка с ID = 444 . SQL Server выберет эту строку настолько эффективно, насколько это возможно.

FAST 10 может использоваться в ситуации, когда вы можете сразу использовать первые 10 строк, даже если вы продолжаете ждать дальнейших результатов.

1
ответ дан 8 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

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