Мне нужна ваша помощь, чтобы оптимизировать запрос ниже. Предположим, у нас есть веб-приложение для статей. Программное обеспечение использует две таблицы: одна — это таблица статей, а вторая — таблица пользователей. Таблица статей содержит дату создания статьи, идентификатор, тело, заголовок и раздел. Предположим, что у нас есть один раздел под названием «новости», и к разделу новостей относится миллион статей. Итак, в этом случае, как оптимизировать следующий запрос:
SELECT username,title FROM article,users
WHERE article.auther_id=users.id AND section LIKE 'news'
ORDER BY article.date DESC
LIMIT 0,40
Структуры таблиц:
CREATE TABLE `article` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NOT NULL ,
`body` VARCHAR( 200 ) NOT NULL ,
`date` VARCHAR( 30 ) NOT NULL ,
`auther_id` INT NOT NULL ,
`section` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ;
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ;
Я попытался создать один индекс, состоящий из раздела и даты, но он не самый лучший, потому что если у нас есть 2 миллиона записей, и один миллион из них принадлежит одному разделу, БД будет сканировать один миллион строк.