我在我的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秒。
表中的文章大约包含超过70k行,articles_types仅包含大约70行。
是否有机会优化该表的结构(可能是引擎?),还是优化查询本身以使其更快?
你对这些表的索引创建索引?如果是这样,让我们知道哪些列被覆盖。 – 2010-09-11 22:20:26
2Dustin:正如您在上面看到的那样,表格由许多索引组成,现在我已经为articles.like_count添加了一个新索引,因为结果按此列排序。但它没有帮助。 – 2010-09-12 07:36:51
2Damien:感谢considiring有关:-)相信我,如果我能真正回答,哪个能解决我的问题,我会接受这个答案。 – 2010-09-12 07:38:37