MY sql 灵异事件

sanxiao2008 2011-03-29 10:09:34
是一个关于mysql的问题.语句如下:
(SELECT n.nid,n.created,u.dst, NULL as tid FROM en_node n LEFT JOIN en_url_alias u ON n.nid = SUBSTRING(u.src, 6) ORDER BY n.created DESC LIMIT 20)

en_node en_url_alias 数据量在900条左右,而查询此句sql,竟然花掉1.3秒之多.
去掉 ORDER BY n.created DESC ,时间是0.02左右.
总共查询出的结果就才20条,一个order by,为何花费这么多时间?

两个表的结构如下 :
CREATE TABLE IF NOT EXISTS `en_node` (
`nid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`vid` int(10) unsigned NOT NULL DEFAULT '0',
`type` varchar(32) NOT NULL DEFAULT '',
`language` varchar(12) NOT NULL DEFAULT '',
`title` varchar(255) NOT NULL DEFAULT '',
`uid` int(11) NOT NULL DEFAULT '0',
`status` int(11) NOT NULL DEFAULT '1',
`created` int(11) NOT NULL DEFAULT '0',
`changed` int(11) NOT NULL DEFAULT '0',
`comment` int(11) NOT NULL DEFAULT '0',
`promote` int(11) NOT NULL DEFAULT '0',
`moderate` int(11) NOT NULL DEFAULT '0',
`sticky` int(11) NOT NULL DEFAULT '0',
`tnid` int(10) unsigned NOT NULL DEFAULT '0',
`translate` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`nid`),
UNIQUE KEY `vid` (`vid`),
KEY `node_changed` (`changed`),
KEY `node_created` (`created`),
KEY `node_moderate` (`moderate`),
KEY `node_promote_status` (`promote`,`status`),
KEY `node_status_type` (`status`,`type`,`nid`),
KEY `node_title_type` (`title`,`type`(4)),
KEY `node_type` (`type`(4)),
KEY `uid` (`uid`),
KEY `tnid` (`tnid`),
KEY `translate` (`translate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1133 ;



CREATE TABLE IF NOT EXISTS `en_url_alias` (
`pid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`src` varchar(128) NOT NULL DEFAULT '',
`dst` varchar(128) NOT NULL DEFAULT '',
`language` varchar(12) NOT NULL DEFAULT '',
PRIMARY KEY (`pid`),
UNIQUE KEY `dst_language_pid` (`dst`,`language`,`pid`),
KEY `src_language_pid` (`src`,`language`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=886 ;

请高人指点,本语句该如何优化?
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanxiao2008 2011-03-29
  • 打赏
  • 举报
回复
但是 其他两个 cn_node cn_url_alias也是同样的结果。 该如何优化?
sanxiao2008 2011-03-29
  • 打赏
  • 举报
回复
谢谢楼上的,explain出来,确实使用了 Using temporary; Using filesort。
sanxiao2008 2011-03-29
  • 打赏
  • 举报
回复
感谢大家指教。
rucypli 2011-03-29
  • 打赏
  • 举报
回复
explain出来 应该是用了Using filesort
WWWWA 2011-03-29
  • 打赏
  • 举报
回复
在en_node上建立nid、created复合索引试试
sanxiao2008 2011-03-29
  • 打赏
  • 举报
回复
自己先顶下了。我用了其他两个表 ,cn_node cn_url_alias (结构和en_node en__url_alias一模一样),同样的语句,查询只要0.17左右,并且数据量比en_node en_url_alias都大。 这也是想不明白的地方。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧