2013-12-05 1 views
0

Следующий запрос используется для отображения «новостей» с наивысшими уровнями хитов и датированных на прошлой неделе.My Query потребляет чрезмерное количество процессорного времени процессора сервера

Поскольку таблица теперь имеет более 14000 записей, запрос потребляет чрезмерное количество процессорного времени процессора сервера

объясняет: -ЛЕГКО Новости иого состояния состояние 4 Const 20619 Использования где; Использование FileSort

INDEXES:

Править Капля Капля ОСНОВНОЙ BTREE Да Нет ID 20635 Нет
состояние Править Падение Падение BTREE Нет состояние 3 Нет
приоритет Править Падение Падение BTREE Нет Нет Приоритет 1 нет нет
Править Капля Капля дата BTREE нет нет даты 20635 Да не упрется 20635 нет Править падение падение кошки FULLTEXT нет нет кошке 1 Да Править Капля Капля название FULLTEXT нет заголовка 1 нет
текст 1 нет

$timeago = strtotime("-1 week"); 

SELECT id, title, sub_title, date, image_url, hits, text, comment 
    FROM news 
    WHERE state = '2' 
    ORDER BY date >= $timeago DESC, hits DESC 
    LIMIT 6 

Мой вопрос в том, как я могу перекодировать запрос таким образом, чтобы избежать массового потребления процессора?

+1

В чем вопрос? – Deepak

+0

Обновлен мой ответ для вас –

ответ

1

Используйте explain plan, чтобы увидеть, что происходит. Вы бы по крайней мере, создать индекс по дате или по дате и ударяется

Update Также ниже будет лучше, я думаю,

SELECT id, title, sub_title, date, image_url, hits, text, comment 
FROM news 
WHERE state = '2' and date >= $timeago 
ORDER BY date DESC, hits DESC 
LIMIT 6 
0

Ну, дело в том, MySQL является, чтобы идти через все 14 000 записей и отсортировать их по времени, чтобы выполнить ваш запрос. Вам нужно проиндексировать столбец даты/времени, чтобы сделать этот запрос более эффективным, иначе он будет использовать много ресурсов, и вам придется значительно модернизировать сервер.