Я невероятно запутался прямо сейчас.
У меня есть веб-сайт с большим количеством данных в нескольких таблицах в моей базе данных. Обычно это не должно быть проблемой из того, что я прочитал. Видимо, это было не так.
Вот мой запрос к таблице d
SELECT SQL_CALC_FOUND_ROWS
d.id,
d.user__id,
d.submit_date,
d.title,
d.view_count,
d.vote_count
FROM d
WHERE d.submit_date <= DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND d.title != 'No Deck Title'
AND d.is_private != 1
ORDER BY d.id DESC
LIMIT 15;
SELECT FOUND_ROWS();
У меня есть INDEX()
на submit_date
, и мой PRIMARY_KEY
равен id
с user__id
внешним ключом, связанным с таблицей user
на user.id
.
Выполнение этого запроса займет более 30 секунд. Я понятия не имею, почему это происходит. Без причины я переключил запрос на это:
DROP temporary table IF EXISTS paging;
CREATE TEMPORARY TABLE paging AS
SELECT SQL_CALC_FOUND_ROWS d.id,
d.user__id,
d.submit_date,
d.title,
d.view_count,
d.vote_count
FROM d
WHERE d.submit_date <= DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND d.title != 'No Title'
AND d.is_private != 1
ORDER BY d.id DESC
LIMIT 15;
SELECT FOUND_ROWS();
SELECT p.id, p.title, p.submit_date, p.view_count, p.vote_count, u.username FROM paging p
INNER JOIN user u on p.user__id = u.id;
Это возвращает те же самые точные наборы результатов за 0,032 секунды, в соответствии с моим последним вызовом в Workbench.
Может кто-нибудь объяснить мне, почему это происходит, и если это нормально для таблиц с большими объемами данных?