【发布时间】:2014-03-25 16:20:44
【问题描述】:
我不知道如何优化此查询并摆脱临时表和文件排序。我尝试添加这么多索引但没有运气,我已经为这个问题将它们全部剥离,因为我真的不知道从哪里开始。
我的问题是,如果除了添加索引之外我无法更改表结构或数据,我该如何尽可能优化此查询。我可以更改查询本身。每个表包含大约 10,000 条记录,大约一个月后它的大小会翻倍,但在可预见的将来会保持这个大小。
下面我将包含表结构以及我尝试执行的查询:
CREATE TABLE IF NOT EXISTS `area` (
`id` varchar(30) NOT NULL,
`boardid` int(11) NOT NULL,
`val` mediumtext NOT NULL,
KEY `prikey` (`id`,`boardid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `subarea` (
`id` varchar(30) NOT NULL,
`boardid` int(11) NOT NULL,
`val` mediumtext NOT NULL,
KEY `prikey` (`id`,`boardid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `area_relations` (
`id` int(11) NOT NULL auto_increment,
`boardid` int(11) NOT NULL,
`areaid` varchar(30) NOT NULL,
`subareaid` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
SELECT SQL_NO_CACHE me.id, me.areaid, me.subareaid, me.boardid
FROM database1.area_relations me
JOIN database1.area area
ON area.boardid = me.boardid AND area.id = me.areaid
JOIN database1.subarea subarea
ON subarea.boardid = me.boardid AND subarea.id = me.subareaid
WHERE me.boardid = '120' ORDER BY area.val, subarea.val
我非常感谢您对此提供的任何帮助,并在连接、索引、文件排序等方面尝试了 RTFMing,但遇到了困难。
这里是解释结果。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE me ALL NULL NULL NULL NULL 6222 Using where; Using temporary; Using filesort
1 SIMPLE area ref prikey prikey 96 database1.me.areaid,const 1 Using where
1 SIMPLE subarea ALL NULL NULL NULL NULL 7409 Using where
谢谢!
【问题讨论】:
-
您确定此查询计划适用于您发布的表结构吗?你也可以制作一个复制它的fiddle吗?
标签: mysql sql join sql-order-by