Итак, я запустил следующее в консоли MySQL в качестве контрольного теста, чтобы увидеть, что сдерживало скорость моего запроса.MySQL CAST уверен, берет свое сладкое время
SELECT bbva_deductions.ded_code, SUBSTRING_INDEX(bbva_deductions.employee_id, '-' , -1) AS tt_emplid,
bbva_job.paygroup, bbva_job.file_nbr, bbva_deductions.ded_amount
FROM bbva_deductions
LEFT JOIN bbva_job
ON CAST(SUBSTRING_INDEX(bbva_deductions.employee_id, '-' , -1) AS UNSIGNED) = bbva_job.emplid LIMIT 500
Для обеспечения безопасности потребовалось приблизительно 4 секунды. (кажется очень высоким только для 500 строк).
Просто удаление CAST часть соединения снизилось, что 0,01 секунд ...
Почему на земле Mr.CAST так медленно? Я что-то делаю, чтобы разозлить богов MySQL здесь?
Edit:
В соответствии с просьбой вот EXPLAIN выход:
И без CAST:
EXPLAIN EXTENDED:
Результаты опубликованы –
Опубликован новый вывод –
Я просто попытался это сделать, и он смог использовать индексный поиск просто отлично. (имеет смысл, потому что это просто поле SELECT, а не часть ключа). Я также попробовал EXPLAIN EXTENDED по запросу при использовании CAST() и получил следующее сообщение: Невозможно использовать ref доступ к индексу 'emplid' из-за преобразования типа или сортировки в поле 'emplid' –