Мне нужны рекомендации по улучшению производительности, мой запрос выполняется несколько секунд, и это вызывает проблемы на сервере. Этот запрос выполняется на самой распространенной странице моего сайта. Я думаю, что радикальное переосмысление может потребоваться.
~ РЕДАКТИРОВАТЬ ~
Этот запрос создает список записей, ключевые слова которых совпадают с ключевыми словами запрашиваемой программы (записи). Мой сайт является каталогом загрузки программного обеспечения. И этот список используется на странице списка программ, чтобы показать другие подобные программы. PadID - это первичный ключ записей программы в моей базе данных.
~ РЕДАКТИРОВАТЬ ~
Вот мой запрос
select match_keywords.PadID, count(match_keywords.Word) as matching_words
from keywords current_program_keywords
inner join keywords match_keywords on
match_keywords.Word=current_program_keywords.Word
where match_keywords.Word IS NOT NULL
and current_program_keywords.PadID=44243
group by match_keywords.PadID
order by matching_words DESC
LIMIT 0,11;
Вот объяснил запрос.
![alt text](https://i.stack.imgur.com/Mc9ll.png)
Вот некоторые примеры данных, однако я сомневаюсь, что вы сможете увидеть влияние любых изменений производительности без дополнительных данных, которые я могу предоставить, если хотите.
CREATE TABLE IF NOT EXISTS `keywords` (
`Word` varchar(20) NOT NULL,
`PadID` bigint(20) NOT NULL,
`LetterIdx` varchar(1) NOT NULL,
KEY `Word` (`Word`),
KEY `LetterIdx` (`LetterIdx`),
KEY `PadID_2` (`PadID`,`Word`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `keywords` (`Word`, `PadID`, `LetterIdx`) VALUES
('tv', 44243, 'T'),
('satellite tv', 44243, 'S'),
('satellite tv to pc', 44243, 'S'),
('satellite', 44243, 'S'),
('your', 44243, 'X'),
('computer', 44243, 'C'),
('pc', 44243, 'P'),
('soccer on your pc', 44243, 'S'),
('sports on your pc', 44243, 'S'),
('television', 44243, 'T');
Я пытался добавить индекс, но это не имеет большого значения.
ALTER TABLE `keywords` ADD INDEX ( `PadID` )