Имам нужда от вашата помощ, за да оптимизирам заявката по-долу. Да приемем, че имаме уеб приложение за статии. Софтуерът използва две таблици; едната е таблицата на статиите, а втората е таблицата на потребителите. Таблицата на статиите съдържа датата на създаване на статията, идентификатора, тялото, заглавието и раздела. Нека приемем, че имаме един раздел, наречен "новини" и има един милион статии, принадлежащи към раздела за новини. Така че в този случай, как да оптимизирате следната заявка:
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 милиона записа и един милион от тях принадлежат към една секция, DB ще сканира един милион ред.