Синтаксис SQL увеличил эффективность - PullRequest
1 голос
/ 06 марта 2012

У меня есть SQL-запрос, который использует фрагмент кода, аналогичный приведенному ниже, много раз (около 50 раз)

Это вызывает медленный запуск запроса.Я ищу более эффективный способ кодирования этого запроса.

 AND ((table1.field1 <=(dbo.view1.field2) OR table1.field1 IS NULL ) 

Все поля, которые меня интересуют, являются датами.

Ответы [ 6 ]

1 голос
/ 06 марта 2012

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

1 голос
/ 06 марта 2012

Просматривая ваш заданный фрагмент, я не могу точно определить эффективность условия в запросе. Но я посоветую вам создать Index для полей, используемых при объединении таблиц, и полей, используемых в условиях.

1 голос
/ 06 марта 2012

Попробуйте

AND (ISNULL(table1.field1, dbo.view1.field2) <= dbo.view1.field2)
0 голосов
/ 27 марта 2012

Добавьте индексы для обоих столбцов, если вы можете себе это позволить.

0 голосов
/ 06 марта 2012

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

См. этот пост , чтобы начать работу с основами.

0 голосов
/ 06 марта 2012
AND (table1.field1 IS NULL OR (table1.field1 <=(dbo.view1.field2))

Вы должны создать несколько индексов в зависимости от ваших запросов.

...