最近发布的用户返回结果的速度比老用户快得多

moiiocjp  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(268)

用户1有post id:2,5,7,9
用户2有帖子ids:600000, 600020, 600025, 600033
我的桌柱有600050行。
这就是问题所在,如果我想从用户1中选择帖子,需要15秒以上的时间;如果我想从用户2中选择帖子,则需要00005秒。
我注意到,拥有更多最新帖子的用户加载速度会更快。
用户1:

select c.nome from posts p 
join cadastro c on p.user=c.id 

where (p.user in (1)) and p.delete='0' 
//p.user in 1 - if I place to 2 it will get results much faster

group by p.id
order by p.id desc limit ?

我想从这两方面更快地得到结果。不仅仅是用户2。有什么想法吗?

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user` int(11) UNSIGNED NOT NULL,
  `titulo` text,
  `data` datetime NOT NULL,
  `ip` varchar(20),
  `delete` tinyint(1) NOT NULL DEFAULT '0'
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

我尝试在用户上添加索引,但没有任何更改。

vc9ivgsu

vc9ivgsu1#

你没有索引 user ,所以每次都要做一次表扫描才能找到帖子。这是资本b坏,将削弱表现。用以下方法修复:

CREATE INDEX idx_user ON posts (user, `delete`);

然后你可以和 EXPLAIN 以确保它正确应用于您的查询。
请注意,尽量避免使用mysql保留关键字,如 DELETE 作为列名。类似的“删除”也同样有效。

相关问题