Я сейчас глупости буду говорить. Закройте страницу, отключитесь от интернета, выключите комп и отойдите на 500 метров минимум. Что б не заразиться.
Разговорились тут с одним знакомым (про ники как обычно молчу) по поводу типов INT и datetime. Мол, что это у меня за изврат — UNIX_TIMESTAMP(NOW( )) — делай тип date и просто NOW() и будет тебе счастье, много тёлок и вилла на канарах. Я, понятно, не согласен. Юзал инт для дат, на том стою и стоять буду. Поболтали.
Потом я решил проверить ради интереса.
Делаю пару тысяч записей как-то так.
$sql=»INSERT INTO `table` SET `date`= NOW(), `int`=».time();
Да, все записи получаются одинаковые.
Потом выборки в большом цикле по одному из полей.
$sql=»SELECT * FROM `table` WHERE (`int` < ".time().")";
$sql="SELECT * FROM `table` WHERE (`date` < NOW())";
Протестил раза три. Выборка по date обгоняет примерно процентов на 5. Ладно, думаю, а если жёстко загнать данные.
$sql="SELECT * FROM `table` WHERE (`int` = '1206644930')";
$sql="SELECT * FROM `table` WHERE (`date` = '2008-03-27 22:08:50')";
Второй запрос быстрее на 3-5%. Понятно, думаю. Да, можно и datetime юзать, чуть быстрее, если это важно, конечно.
Думаю дальше. Так, внутри mysql datetime всё равно хранится как int или как обрезанный int. (по идее я не прав, но подумалось почему-то так). Значит в строку он должен конвертиться, значит должно быть медленнее.
$sql="SELECT `int` FROM `table` WHERE (`int` = '1206644930')";
$sql="SELECT `date` FROM `table` WHERE (`date` = '2008-03-27 22:08:50')";
Первый запрос в цикле - 2.5 сек. Второй - 3.4 сек. Так-то вот. В случае сравнения > и < соотношение цифр такое же — int селектится быстрее.
Хотя по уму надо бы две таблицы. Да ещё на никсах проверить (эти тесты под win были).
Так вот, почему это глупости. Вам что, нужен прирост 0.1% скорости? (целиком в приложении так и будет). Вот всё остальное идеально, только бы найти, где одну тысячную сэкономить?
Вряд ли. Так что не занимайтесь такими глупостями, пишите, как пишется быстрее, а не как работает. Разницу всё равно не заметите.
всегда юзаю int для time
int ++1