Я делаю два запросаИндекс MySQL проблема при работе с функцией
SELECT * FROM datedim WHERE year = YEAR(now());
и
SELECT * FROM datedim WHERE year = YEAR(getNow());
Здесь getNow() функция просто возвращает NOW();
Моя проблема в том, что первая из них является немедленной, а вторая занимает гораздо больше времени. (1.xx сек)
Когда я выполняю команду объяснить я это для первого (и это хорошо)
+----+-------------+---------+------+---------------+-------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+-------------+---------+-------+------+-------------+
| 1 | SIMPLE | datedim | ref | dd_year_idx | dd_year_idx | 5 | const | 365 | Using where |
+----+-------------+---------+------+---------------+-------------+---------+-------+------+-------------+
Но это для второго (что очень плохо)
+----+-------------+---------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | datedim | ALL | NULL | NULL | NULL | NULL | 10958 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+-------+-------------+
Может кто-нибудь объяснить мне, что происходит, и зачем делать то же самое, ища всю дату с годом, то же самое с NOW(), занимает гораздо больше времени, используя функцию, чем давать ее прямо.
Этот пример прост, но позже моя функция вернет определенную дату, я хотел бы просто понять, что происходит.
Затрудняюсь ответить, не зная, что 'getNow()' делает, не так ли? –
Извините. getNow() просто выполните RETURN NOW(); – Spredzy
Я не думаю, что оптимизатор даже попытается проиндексировать определенную пользователем функцию. – ethrbunny