因此,我一直在使用mysqlnd在PHP中处理异步数据库请求,以实现并行数据库请求,并缩短执行时间,即,而不是:
total time = query 1 time + query 2 time + query 3 time + query 4 time相反:
total time = max(query 1 time, query 2 time, query 3 time, query 4 time)我的想法是,使用MYSQLI_ASYNC可以使查询不阻塞,从而允许您用一个新的连接一个接一个地启动多个查询,并且当MySQL以并行方式处理查询时,从而实现并行数据库请求的执行。然而,无论执行时间如何,我都没有看到任何改善,相反,我看到的是相同的执行时间,好像查询是一个接一个地运行一样。
我哪里出错了,这真的有可能吗?(请注意,我是一个开发人员,而不是系统管理员)
发布于 2015-08-25 11:07:56
因此,在进行了更多的研究之后,我的结论是,MySQL根本不可能实现并行查询。看起来最接近的方法是使用shard-query,但我相信这只能在使用分区时对单个数据库执行并行查询,并且分区不支持外键。外键是Magento数据库结构的一个重要部分,所以这不是一种选择。
希望有一天将支持并行查询,但现在,回到绘图板.
发布于 2015-08-22 16:09:37
考虑将多个查询抛到存储过程中。这样,到它的单个CALL就是到服务器的一次往返旅行。对于localhost来说,这并不重要。但是,如果应用程序和MySQL是分开的机器,特别是如果它们可能位于非洲大陆的不同一侧,那么以这种方式将查询捆绑在一起可能是一个显著的加速。
SELECT * FROM tbl WHERE primary_key = 123;是如此之快以至于并行是无用的。
扫描一百万行以找到10是非常缓慢的,因此您应该改变查询设计,而不依赖于并行性。
我的网页需要运行几十个琐碎或简单的查询;页面响应时间足够好,我不觉得需要并行性。如果页面变慢了,我会查找最慢的查询,并关注如何改进它。
https://dba.stackexchange.com/questions/111852
复制相似问题