首页 > 解决方案 > 拥有最近帖子的用户将比拥有旧帖子的用户更快地返回结果

问题描述

用户 1 的帖子 ID:2,5,7,9

用户 2 的帖子 ID:600000、600020、600025、600033

我的表格帖子有 600050 行。

这就是问题所在,如果我想从用户 1 中选择帖子,则需要 15.+ 秒,如果我想从用户 2 中选择帖子,它将在 0,0005 完成。

我注意到拥有最近帖子的用户加载速度会更快。

用户 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 ;

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

标签: mysqlsql

解决方案


您在 上没有索引user,因此每次都必须进行表扫描以查找帖子。这是大写B Bad,会削弱性能。修复它:

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

然后您可以检查EXPLAIN以确保它在您的查询中正确应用。

请注意,尽量避免使用MySQL 保留关键字,如DELETE列名。类似“已删除”的内容也同样有效。


推荐阅读