占用大量资源。我玩并发一些长时间运行的查询和服务器变坏了。查询类似于
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
中有postId
和id
??