Если в SQL-запрос поставить фиктивное условие, например, между mindate и maxdate, снизится ли эффективность запроса? - PullRequest
0 голосов
/ 14 ноября 2011

В SQL Server 2008,

select * from OneTable

сравнить с

select * from OneTable where OneTable.SomeDate between 'MINDATE' and 'MAXDATE'

Какой из них быстрый или они такие же быстрые?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Эти запросы функционально эквивалентны только в том случае, если вы извлекаете всю таблицу, и в этом случае предоставление дополнительного условия, которое никоим образом не ограничивает извлекаемые данные, вряд ли будет быстрее. может быть медленнее (а) в силу того, что вы получаете доступ к данным через индекс.С опцией полного сканирования таблицы вам больше не нужно прикасаться к индексу.

Конечно, будет быстрее ограничить строки, извлекаемые на стороне сервера, чем получать все, а затем фильтровать на стороне клиента (при условии, конечно, что у вас есть индекс для вашего столбца SomeDate.

Но это только для случая, когда вы не извлекаете каждую строку.


(a) Или ваша СУБД может рано выяснить, что вы все просили, и в любом случае выполнить полное сканирование таблицы, сводя к минимуму влияние.

Но, вероятно, все же будет незначительныммедленнее только потому, что эту проверку нужно выполнить заранее.

0 голосов
/ 14 ноября 2011

В этом простом случае это, вероятно, не имеет значения.Однако, если у вас есть более ограничительное условие where, это может привести к полному сканированию таблицы, даже если оно не требуется, и значительно снизить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...