Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mysql中优化长时间运行的查询_Php_Mysql - Fatal编程技术网

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
之外的任何东西?请记住,原则上,您的代码应该是其他程序员可以理解的,即使目前只有您在编写代码。