gpt4 book ai didi

php - 优化高索引表上的 INSERT/UPDATE 查询

转载 作者:行者123 更新时间:2023-11-30 22:52:43 25 4
gpt4 key购买 nike

我正在使用一个基于 OpenCart 1.5.6.4 的网站,该网站已对原始网站进行了高度修改(添加索引、修改查询,随便你怎么说,只是为了提高性能)。

服务器是一个 VPS,具有 2 x 2GHz 处理器50GB SSD4GB RAM。目前有CentOS 6Apache 2.2.15MySQL 5.1.73。该网站是一个在线商店,拥有大约 50,000 种产品和 9 个供应商。

整个系统的初始逻辑是:

  • 从不同“缓冲”表中的供应商导入所有产品

  • 从不同的“缓冲”表中导入供应商的所有产品类别(用于映射目的)

  • 更新网站中的产品...禁用不再可用的产品,或根据以下规则更新现有产品的价格、库存:“如果供应商之间有共同的产品,则取最低的stock!=0 的价格,否则取最低价。

我在更新过程中遇到了一些麻烦。我尝试了一些不同的脚本 ( Select all values that are common between EACH 2 tables on several tables ),但仅运行 1 个查询大约需要 3 秒。

我没有太多 OOP 经验,所以我使用数组:我将所有产品数据加载到一个数组中,我将排除列表加载到另一个数组中,我检查第一个数组中的产品是否未在第二个,对规则进行数学运算并使用批量写入数据 INSERT [...] ON DUPLICATE KEY UPDATE [...]

整个更新需要很长时间,大​​约20 秒 并且“消耗”65% 的 CPU(基于 phpmyadmin 中的读数)。我需要一个解决方案:运行非常非常快(我不介意 CPU)或需要更长的时间但对 CPU 的影响较小......基本上在服务器上有 ~8 个连接时,CPU 使用率约为 50%,这意味着原来的 update.php 崩溃了。

我尝试添加LOCK TABLES product WRITE、查询、UNLOCK TABLES,但性能提高了 0.x 秒。 UPDATE 过程在单个查询中有大约 40,000 个产品......它花费的时间太长,它使用太多 CPU 并长时间锁定表。

我该怎么办?

LE:代码在这里 http://inpromo.ro/update.txt

基本上有9个分销商,有网站类别和分销商类别(必须映射......未映射的类别不要在网站中添加他们的产品),还有制造商也必须映射(相同的制造商可以显示为:ASUS 或 ASUS Components),像这样......

LE2:一个查询如下:

更新产品集 stock_status_id=5,quantity=0,status=0 WHERE status=1 OR quantity!=0 OR stock_status_id!=5

它需要 2-3 秒才能完成(根据 PHP 的 microtime() 函数),而且很多!

最佳答案

谁触发了这次更新?

1) 普通在线用户

2) 一个定时任务

3) 你在行政部门吗?

也许您还可以发布代码行或您正在使用的查询。

PS:不使用 OOP 不错,但在不知道 OOP 的情况下在 opencart 等 OOP 平台上工作是很糟糕的....

read this

关于php - 优化高索引表上的 INSERT/UPDATE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com