который является самым быстрым способом сравнения дат - PullRequest
0 голосов
/ 30 мая 2018

Существует столбец с типом даты, но переданный в процедуре параметр является строкой, поэтому можно ли преобразовать этот столбец в строку или преобразовать переданный параметр в дату, а затем сравнить их?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Преобразование параметра в дату происходит быстрее

  1. Дата - это целочисленный тип данных с фиксированной длиной.Таким образом, сравнение выполняется быстрее, за исключением очень коротких строк.

  2. Преобразование всегда требует времени.Однократное преобразование значения происходит быстрее, чем преобразование значения n раз.

Дополнительно: преобразование в строку и прямое сравнение позволяет сравнивать только на равенство или неравенство.Не меньше чем или больше чем

0 голосов
/ 30 мая 2018

Довольно просто объяснить это:

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

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

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

Кроме того, сравнение даты (времени) будет намного быстрее, так как этоодиночное 8-байтовое * значение, которое можно сравнить с одной инструкцией (или очень немногими) на ЦПУ вместо того, чтобы выполнять итерацию всех символов в строке для сравнения.

Поиск вверх Sargeability ;другой аргумент для преобразования в datetime.

Лучше всего полностью избавиться от строки и ожидать, что datetime пройдет.Это позволяет вашему интерфейсу более четко передавать то, что вам нужно (а также исключает проблемы с преобразованием даты / времени, например, 6/2/2020, 2 июня или 6 февраля или ...?).

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

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