Адреса электронной почты, которые я хочу проверить, будут используемыми веб-приложением 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;
}
}
При использовании TOP x нет никакой пользы от использования OPTION FAST x . Оптимизатор запросов уже принимает решения в зависимости от того, сколько строк вы извлекаете. То же самое касается тривиальных запросов, таких как запрос определенного значения из уникального индекса.
Кроме этого, OPTION FAST x может помочь, когда вы знаете, что количество результатов равно вероятно, ниже x , но оптимизатор запросов этого не делает. Конечно, если оптимизатор запросов выбирает плохие пути для сложных запросов с небольшим количеством результатов, может потребоваться обновление вашей статистики. И если вы угадаете неверно x , запрос может занять больше времени - почти всегда есть риск при подсказках.
Приведенный выше оператор не тестировался - возможно, что все запросы выполняются столько же, если не дольше. Быстро получить первые 10 строк - это здорово, если есть только 8 строк, но теоретически запрос все равно должен выполняться полностью до завершения. Я думаю, что преимущество может заключаться в том, что выполнение запроса идет по другому пути , ожидая на меньше итоговых записей, хотя на самом деле он действительно пытается получить первые x ] Быстрее. Эти два типа оптимизации могут не совпадать.
m мышление может иметь место, потому что выполнение запроса идет по другому пути , ожидая меньше итогов записей, хотя на самом деле он действительно пытается получить первые x быстрее. Эти два типа оптимизации могут не совпадать. m мышление может иметь место, потому что выполнение запроса идет по другому пути , ожидая меньше итогов записей, хотя на самом деле он действительно пытается получить первые x быстрее. Эти два типа оптимизации могут не совпадать.Подсказка FAST имеет смысл только в сложных запросах, где есть несколько альтернатив, из которых оптимизатор может выбрать. Для простого запроса, такого как ваш пример, это ни с чем не помогает, оптимизатор запросов сразу определит, что существует тривиальный план (поиск в индексе идентификатора, имя поиска, если оно не покрывает), чтобы удовлетворить запрос и перейти к нему. Даже если для идентификатора не существует индекса, план остается тривиальным (вероятно, кластерное сканирование).
Чтобы дать пример, в котором может быть полезен FAST, рассмотрим соединение между A и B с ограничением ORDER BY. Скажем, при оценке соединения B сначала и вложенных циклов A соблюдается ограничение ORDER BY, поэтому будут получены быстрые результаты (SORT не требуется), но это более затратно из-за количества элементов (B имеет много записей, соответствующих WHERE, а A - несколько). С другой стороны, оценка первого B и вложенного цикла A создаст запрос, который выполняет меньше операций ввода-вывода, следовательно, в целом быстрее, но результат должен быть отсортирован в первую очередь, и SORT может начаться только после оценки соединения, так что первый результат придет очень поздно. Оптимизатор обычно выбирает второй план, потому что он в целом более эффективен. Подсказка FAST заставит оптимизатор выбрать первый план, потому что он дает результаты быстрее.
Для этого конкретного запроса, конечно, нет! Будет возвращена только одна строка - строка с ID = 444
. SQL Server выберет эту строку настолько эффективно, насколько это возможно.
FAST 10
может использоваться в ситуации, когда вы можете сразу использовать первые 10 строк, даже если вы продолжаете ждать дальнейших результатов.