Всегда храните даты как date
тип. Если вы храните их как строки, это добавляет накладные расходы для выполнения любых арифметических операций c со значениями (включая эти неравенства).
Если вы решили проигнорировать этот совет и в любом случае сохранить даты как string
, то я считаю, что вторая форма (список IN
) будет быстрее, поскольку она сравнивает текстовую строку с текстовой строкой. Другой вариант, использующий неравенства, может не дать ожидаемых результатов, если вы явно не указали CAST(my_date_column as date)
и CAST(your_date_column as date)
. Эти приведения будут применяться к каждой записи, что увеличивает общую стоимость запроса, и их можно было бы избежать, если бы эти столбцы хранились как date
.
Третий вариант, который вы не упомянули, это использовать оператор BETWEEN
(ie. WHERE my_date BETWEEN start_date AND end_date
). Это то же самое, что и использование двух неравенств, но, возможно, немного чище и более идиоматически c.
В случае сомнений взгляните на планы EXPLAIN
, чтобы понять, как будет выполняться запрос.