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

时间:2016-08-19 10:52:33

标签: php mysql

需要很高的资源。我同时播放一些长时间运行的查询,服务器崩溃了。 查询就像

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

该表有超过100 000行。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

优化查询的第一步是使用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)

对于feedId和wallId也是如此。

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

答案 2 :(得分:0)

在您的查询中:

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

posts应该是唯一的。鉴于名称,这是一个合理的假设。所以这个查询应该足够了:

SELECT id 
FROM posts 
WHERE postId = '765888827630161920'

根据你的说法,你已经将postId编入索引...这样就是最优化的查询。

让我想知道为什么表postId中有idposts ???

如果你有很多帖子,很多人,你可以将旧帖子放在不同的表格中,甚至是不同的数据库或服务器,因为大多数时候只需要最新的帖子。