Я делаю два запроса
SELECT * FROM datedim WHERE year = YEAR(now());
и
SELECT * FROM datedim WHERE year = YEAR(getNow());
Здесь функция getNow () просто возвращает NOW ();
Моя проблема в том, что первый является немедленным, а второй - намного дольше. (1xx сек)
Когда я выполняю команду объяснения, я получаю это для первой (что хорошо)
+----+-------------+---------+------+---------------+-------------+---------+-------+------+-------------+
| 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 (), занимает гораздо больше времени при использовании функции, чем прямая.
Этот пример прост, но позже моя функция вернет определенную дату, я хотел бы просто понять, что происходит.