繁体   English   中英

在mysql 5.1中优化查询和表

[英]optimizing query and table in mysql 5.1

我有一个关于优化以下查询/表的问题

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

对于具有1100万条记录的表,有时可能需要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;

有什么方法可以定义更好的键或索引来加快查询速度

亲切的问候,

比约恩

尝试仅对playdatetime,licenseid,playitemid单独编制索引,或仅对licenseidplayitemid

MySQL 5.1非常旧(10年)。 升级到5.7可提高性能(或使用像mariadb 10.1这样的mysql fork)。

您也可以尝试计算以下内容:Date_sub(Curdate(),INTERVAL 1 month)without mysql(php strtotime或其他),如果每天调用多次,请使用mysql缓存进行即时请求,请注意不要使用更多超过128MB,也会降低性能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM