У меня есть в моей базе данных MySQL эти две таблицы:Оптимизация структуры MySQL запросов/баз данных
CREATE TABLE IF NOT EXISTS `articles` (
`id` bigint(20) NOT NULL,
`url` varchar(255) collate utf8_bin NOT NULL,
`img` varchar(255) collate utf8_bin NOT NULL,
`name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`url_key` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`type_code` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`likes_count` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE IF NOT EXISTS `articles_types` (
`id` int(11) NOT NULL auto_increment,
`code` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`url_key` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`code`),
KEY `type` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
И я пытаюсь запустить этот запрос:
SELECT a.* FROM `articles` a INNER JOIN articles_types at ON at.`code`=a.type ORDER BY p.likes_count DESC LIMIT 1
который возвращает 1 строку, в 1 сек..
Табличные статьи состоят примерно из 70 тысяч строк, articles_types всего около 70 строк.
Есть ли вероятность оптимизировать структуру (может быть, двигатель?) Этих таблиц или оптимизировать сам запрос, чтобы сделать его быстрее?
У вас есть индексы на этих таблицах? Если да, сообщите нам, какие столбцы покрыты. –
2Dustin: Как вы можете видеть выше, таблицы состоят из многих индексов, теперь я добавил новый индекс в articles.like_count, потому что результаты сортируются по этому столбцу. Но это не помогло. –
2Damien: Спасибо за то, что подумал :-) Поверьте мне, если бы я действительно ответил, что бы решить мои проблемы, я бы согласился на этот ответ. –