Php 如何在mysql中优化长时间运行的查询
这需要大量资源。我同时执行一些长时间运行的查询,服务器关闭了。 查询就像Php 如何在mysql中优化长时间运行的查询,php,mysql,Php,Mysql,这需要大量资源。我同时执行一些长时间运行的查询,服务器关闭了。 查询就像 SELECT posts.id FROM posts WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949' 该表有超过100000行。尝试在筛选列上添加复合索引 ALTER TABLE `posts ` ADD INDEX `idx_posts` (`postId `, `feedId`, `wallId` ); 优化查
SELECT posts.id
FROM posts
WHERE postId = '765888827630161920' AND feedId = '3700' AND wallId = '949'
该表有超过100000行。尝试在筛选列上添加复合索引
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结果的解决方案是为您在where条件中使用的每个字段添加一个索引
CREATE INDEX index_postId
ON posts (postId)
feedId和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'
根据你的说法,你已经把帖子编入了索引。。。因此,这是可能的最佳查询
我想知道为什么表posts
中有posted
和id
如果你有很多文章,几百万篇,你可以把旧的文章放在不同的表中,甚至放在不同的数据库或服务器中,因为大多数时候只需要最新的文章。考虑
索引列,这些列在where
clauseThankyou@Saurabh中使用。我已经应用了它,“‘LAC中的计数’是什么意思?”?也许是“以万计”?是的,它的意思是Lakhs。请让它简单易懂。请让我知道idx前缀。@MayankSharma只是我个人的命名约定。。通常我会为索引添加一个前缀(idx)。。对于没有相同名称的表或列,谢谢。它对我的查询几乎没有加速作用。id是主键,postId是从第三方api获取的id。那么,postId
是唯一的吗?为什么不称它为更合理的名称,比如:thirdPartyId
或originalId
,除了postId
之外的任何东西?请记住,原则上,您的代码应该是其他程序员可以理解的,即使目前只有您在编写代码。