优化mysql 5.1中的查询和表

时间:2017-03-06 15:37:39

标签: mysql

我对优化以下查询/表格有疑问

SELECT playitemid,MAX(playdatetime) 
        FROM   buma
        WHERE  licenseid = 1 AND playdatetime > Date_sub(Curdate(), INTERVAL 1 month) 
        GROUP  BY playitemid 

对于包含1,100万条记录的表格,有时可能需要30秒以上。

这是表的create语句。

CREATE TABLE `buma` (
 `bumaid` int(11) NOT NULL AUTO_INCREMENT,
`playitemid` int(11) NOT NULL,
`playdatetime` datetime DEFAULT NULL,
`stopdatetime` datetime DEFAULT NULL, `licenseid` int(11) NOT NULL, editionid` int(11) DEFAULT NULL, 
PRIMARY KEY (`bumaid`),
KEY `ind_buma`(`playdatetime`,`licenseid`,`playitemid`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=68644363 DEFAULT CHARSET=latin1;

有没有办法定义更好的密钥或索引来加速查询

亲切的问候,

比约恩

1 个答案:

答案 0 :(得分:0)

尝试仅对playdatetime,licenseid,playitemid或仅仅licenseidplayitemid进行索引。

MySQL 5.1很老(10岁)。 升级到5.7以获得良好的性能提升(或使用类似mariadb 10.1的mysql分支)。

您也可以尝试计算:Date_sub(Curdate(),INTERVAL 1个月)没有mysql(php strtotime或其他),并且如果你每天多次调用它,请使用mysql cache for instant request,小心不要使用超过128MB,它也会降低性能。)

相关问题