浏览 3031 次
锁定老帖子 主题:MYSQL优化问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-14
在EXPLAIN SELECT时,看到有: extra Using temporary; Using filesort 似乎这样会降低查询速度,不知如何解决 查询涉及 两个表 : table a, table b a和 b都有一个字段 type,type有一个外键参考另外一个表c的id 查询语句类似如此 SELECT * from a,b WHERE b.status = 100 AND a.type = b.type ORDER BY a.create DESC LIMIT 20 其中 a.create 记录建立起的时间戳 有索引 b.status 也是另外一个表的外键 表a的记录比较多(现在也就几万条吧,以后会更多,所以希望优化一下查询速度) 表b还好也就5千条左右。 不知道上述查询有什么问题,造成了extra的Using temporary; Using filesort? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-15
这样子行不行:
select * from a join b on a.type = b.type where b.status = 100 order by a.create desc limit 20 ; 在 a.create 上设置索引。 能不能表的创建语句贴出来,要不谁有心情给你调试。 |
|
返回顶楼 | |
发表时间:2007-05-15
主要我希望知道如何解决出现这个的问题:
Using temporary; Using filesort 大致的建表语句如下 CREATE TABLE `a` ( `id` int(11) NOT NULL auto_increment, `type` int(11) NOT NULL, `name` varchar(64) NOT NULL, `create` datetime default NULL, `status` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `index_create` (`create`), KEY `fk_a_type` (`type`), ) ENGINE=InnoDB; CREATE TABLE `b` ( `id` int(11) NOT NULL auto_increment, `status` int(11) NOT NULL, `type` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `fk_status` (`status`), KEY `fk_b_type` (`type`), ) ENGINE=InnoDB; |
|
返回顶楼 | |