Что быстрее, integer или datetime.

Я сейчас глупости буду говорить. Закройте страницу, отключитесь от интернета, выключите комп и отойдите на 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% скорости? (целиком в приложении так и будет). Вот всё остальное идеально, только бы найти, где одну тысячную сэкономить?
Вряд ли. Так что не занимайтесь такими глупостями, пишите, как пишется быстрее, а не как работает. Разницу всё равно не заметите.

Комментарии (2) на “Что быстрее, integer или datetime.”

  1. всегда юзаю int для time

Можно чего-нибудь сказануть.