Php MYSQL成员日志查询速度慢-性能问题

Php MYSQL成员日志查询速度慢-性能问题,php,mysql,query-optimization,where-clause,mysql-5.7,Php,Mysql,Query Optimization,Where Clause,Mysql 5.7,我有一个记录成员的表 这里有1486044条记录 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(

我有一个记录成员的表

这里有1486044条记录

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
您需要
(用户,id desc)
上的索引

请注意,我删除了
user
的筛选值周围的单引号,因为此列是一个数字。这不一定会加快速度,但会更干净


另外:
select*
不是一种好的做法,对性能也不好。您应该枚举结果集中所需的列(如果不需要全部,请不要全部选择)。如果您想要所有的列,因为您的表没有很多列,您可能需要在所有5列上尝试覆盖索引,例如:
(用户、id描述、操作详细信息、ip地址、l\U日期)

,除了在(用户、id)上创建索引的选项之外,前面已经提到过,一个可能更好的选择是将表转换为InnoDB,因为只在(用户)上创建索引。

抱歉,这不是一个适当的答案。我希望查询速度更快。您给出的示例与此无关。@perfectmorn:我建议您的查询使用一个索引(实际上是两个索引),这样它运行得很快。你觉得什么不合适?你能用完整的代码示例解释一下吗。如果我需要对表进行更改也是一样的。@perfectmorn:只需使用,如:
在用户日志(user,id desc)上创建索引myidx
。很好。我刚刚为用户列编制了索引,性能有了很大的提高。定义索引到底意味着什么?这些条目有什么问题吗?因为一个用户可以输入多条记录。