简化数据库/表结构我有两个表的情况,我们存储“项目”和项目属性(两者之间的关系是 1-N)
我正在尝试优化以下查询,该查询获取 hotdeals 部分中的最新项目。为此,我们有一个item_property
表,它存储项目部分以及许多其他项目元数据
注意:不能更改表结构来优化查询,即:我们不能简单地将部分添加为表中的列,item
因为每个项目可以有无限数量的部分。
这是两个表的结构:
CREATE TABLE `item` (
`iditem` int(11) unsigned NOT NULL AUTO_INCREMENT,
`itemname` varchar(200) NOT NULL,
`desc` text NOT NULL,
`ok` int(11) NOT NULL DEFAULT '10',
`date_created` datetime NOT NULL,
PRIMARY KEY (`iditem`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `item_property` (
`iditem` int(11) unsigned NOT NULL,
`proptype` varchar(64) NOT NULL DEFAULT '',
`propvalue` varchar(200) NOT NULL DEFAULT '',
KEY `iditem` (`iditem`,`proptype`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
这是查询:
SELECT *
FROM item
JOIN item_property ON item.iditem=item_property.iditem
WHERE
item.ok > 70
AND item_property.proptype='section'
AND item_property.propvalue = 'hotdeals'
ORDER BY item.date_created desc
LIMIT 20
哪个是优化此查询的最佳索引?现在优化器(解释)将使用临时和文件排序,处理一吨行(连接的大小)
表目前都是 MyIsam,但如果确实需要优化查询,可以更改为 InnoDB
谢谢