如何优化mysql中长时间运行的查询


how to optimized long running query in mysql

占用大量资源。我玩并发一些长时间运行的查询和服务器变坏了。查询类似于

SELECT posts.id 
FROM posts 
WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949'

尝试在过滤器列上添加一个复合索引

ALTER TABLE `posts ` ADD INDEX `idx_posts` (`postId `, `feedId`, `wallId` );

优化查询的第一步是使用EXPLAIN。

EXPLAIN SELECT posts.id 
FROM posts 
WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949'

这个SQL提供了MySQL获取数据的方式。

没有看到EXPLAIN结果的第一个解决方案是为您在条件

中使用的每个字段添加索引
CREATE INDEX index_postId
ON posts (postId)

feeddid和wallId也是一样。

索引的使用增加了表的大小,但增加了MySQL在数据中查找的速度。

在您的查询中:

SELECT posts.id 
FROM posts 
WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949'

postId在表posts中必须是唯一的。考虑到这些名字,这是一个合理的假设。所以这个查询应该是足够的:

SELECT id 
FROM posts 
WHERE postId = '765888827630161920'

根据你你已经索引了postId…这是最优的查询。

让我想知道为什么表posts中有postIdid ??

如果你有非常多的帖子,数百万,你可以把旧的帖子放在不同的表,甚至不同的数据库或服务器,因为大多数时候只需要最新的帖子。