需要很高的资源。我同时播放一些长时间运行的查询,服务器崩溃了。 查询就像
SELECT posts.id
FROM posts
WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949'
该表有超过100 000行。
答案 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
中有id
和posts
???
如果你有很多帖子,很多人,你可以将旧帖子放在不同的表格中,甚至是不同的数据库或服务器,因为大多数时候只需要最新的帖子。