@ Smita V, неэффективный запрос, на который вы ссылаетесь, только потому, что вы неправильно применяете свою функцию преобразования к каждой строке таблицы, где вы должны применить ее к самому условию. Так что вместо
select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
, который преобразует каждую строку в таблице, чтобы сравнить ее с полученной датой. Вы должны использовать
select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2).
При таком способе будут использоваться соответствующие индексы таблиц.
@ treznik Некоторое время назад я перешел от целого числа uts к типам данных datetime или timestamp, по причинам, указанным выше, в том смысле, что их гораздо проще читать и манипулировать ими (я довольно часто использую прямой доступ к таблицам) , Однако в последнее время я начал переосмысливать этот подход по двум причинам:
- Нет сохраненного местоположения часового пояса, поэтому вы выводите часовой пояс на основе вашего местоположения. Это может или не может быть проблемой для вас.
- Он игнорирует переход на летнее время. Таким образом, когда часы возвращаются в 2 часа ночи, вы получите 1:30 утра дважды, и если вы скажете, что 2011-10-30 01:30 не даст вам знать об этом, тогда как 1319938200 знает. Я не думаю, что в mysql есть собственный способ хранить дату, включая часовой пояс, кроме как в виде строки (2011-10-30 01:30 BST).
Я все еще пытаюсь сам найти ответ на этот вопрос.