[英]MYSQL MEMBER LOG QUERY SLOW - PERFOMANCE PROBLEM
我有一张表,用于记录成员。
这里有 1,486,044 条记录。
SELECT * FROM `user_log` WHERE user = '1554143' order by id desc
但是,此查询需要 5 秒。 你有什么建议吗 ?
下面的表结构;
CREATE TABLE IF NOT EXISTS `user_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` int(11) NOT NULL,
`operation_detail` varchar(100) NOT NULL,
`ip_adress` varchar(50) NOT NULL,
`l_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
COMMIT;
对于此查询:
SELECT * FROM `user_log` WHERE user = 1554143 order by id desc
您需要(user, id desc)
上的索引。
请注意,我删除了user
过滤值周围的单引号,因为该列是一个数字。 这不一定会加快速度,但更干净。
另外: select *
不是一个好习惯,也不利于性能。 您应该在结果集中枚举您想要的列(如果您不需要它们,请不要全部选择它们)。 如果您想要所有列,因为您的表没有很多列,您可能想要尝试对所有 5 列进行覆盖索引,例如: (user, id desc, operation_detail, ip_adress, l_date)
。
除了已经提到的在 (user, id) 上创建索引的选项之外,可能更好的选择是将表转换为 InnoDB,因为仅在 (user) 上创建索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.