Php 表更新速度慢

Php 表更新速度慢,php,mysql,Php,Mysql,我在OpenCart中有一个产品表,共有57000条记录。它看起来像: Field Type Null Key Default Extra product_id int(11) NO PRI NULL auto_increment model char(64) NO NULL sku char(100) NO UNI NULL upc char(1) NO NULL

我在OpenCart中有一个
产品
表,共有57000条记录。它看起来像:

 Field  Type    Null    Key     Default     Extra   
product_id  int(11) NO  PRI     NULL    auto_increment
model   char(64)    NO      NULL    
sku     char(100)   NO  UNI     NULL    
upc     char(1) NO      NULL    
ean     char(1) NO      NULL    
jan     char(1) NO      NULL    
isbn    char(1) NO      NULL    
mpn     char(1) NO      NULL    
location    char(1) NO      NULL    
quantity    int(4)  NO      0   
stock_status_id     int(11) NO      NULL    
image   char(255)   YES         NULL    
manufacturer_id     int(11) NO  MUL     NULL    
shipping    tinyint(1)  NO      1   
pret_brut   decimal(15,2)   NO      0.00    
price   decimal(15,2)   NO      0.00    
points  int(8)  NO      0   
tax_class_id    int(11) NO      NULL    
date_available  date    NO      NULL    
weight  decimal(15,8)   NO      0.00000000  
weight_class_id     int(11) NO      0   
length  decimal(15,8)   NO      0.00000000  
width   decimal(15,8)   NO      0.00000000  
height  decimal(15,8)   NO      0.00000000  
length_class_id     int(11) NO      0   
subtract    tinyint(1)  NO      1   
minimum     int(11) NO      1   
sort_order  int(11) NO      0   
status  tinyint(1)  NO  MUL     0   
date_added  datetime    NO      0000-00-00 00:00:00 
date_modified   datetime    NO      0000-00-00 00:00:00 
viewed  int(5)  NO      0   
使用的索引:

PRIMARY BTREE   Yes No  product_id  56399   A   No <br/>
sku BTREE   Yes No  sku 56399   A   No<br/>
manufacturer_id BTREE   No  No  manufacturer_id 386 A   No<br/>
 +status    BTREE   No  No  status  1   A   No<br/>
 +date_available    440 A   No<br/>
PRIMARY BTREE Yes No产品\u id 56399 A No
sku B目录是否sku 56399 A否
制造商id B树号无制造商id 386 A号
+状态B无树无状态1无
+日期\u可用440 A编号
。。。最后一个(带“+”)是多个字段的索引(我不知道它的技术名称)

问题是,当我在该表上运行“更新产品集库存状态id=5,数量=0,状态=0”这样的查询时,我会在0.8到1.5秒之间通过PHP的microtime()函数。也许我有点偏执,但这似乎太过分了。有没有办法提高更新时间

LE:

PRIMARY BTREE   Yes No  product_id  56399   A   No <br/>
sku BTREE   Yes No  sku 56399   A   No<br/>
manufacturer_id BTREE   No  No  manufacturer_id 386 A   No<br/>
 +status    BTREE   No  No  status  1   A   No<br/>
 +date_available    440 A   No<br/>

我想禁用该表中的所有产品,然后只更新活动的产品。我不知道这是否是最好的方法,但我认为最好是检查每一个。还有其他更快的方法吗?

为什么不使用WHERE对记录进行分块,使用WHERE子句可以缩短更新时间

像这样试试

UPDATE product SET stock_status_id=5, quantity=0, status=0 
    WHERE 
status!=0;

为什么不使用WHERE对记录进行分块,使用WHERE子句可以缩短更新时间

像这样试试

UPDATE product SET stock_status_id=5, quantity=0, status=0 
    WHERE 
status!=0;

为什么不使用WHERE对记录进行分块,使用WHERE子句可以缩短更新时间

像这样试试

UPDATE product SET stock_status_id=5, quantity=0, status=0 
    WHERE 
status!=0;

为什么不使用WHERE对记录进行分块,使用WHERE子句可以缩短更新时间

像这样试试

UPDATE product SET stock_status_id=5, quantity=0, status=0 
    WHERE 
status!=0;

您的
UPDATE
查询,按照您的公式,将更新表中的所有行。它以大约每两百微秒一行的速度运行。这是出色的表现

通过这样做,您可能会让它运行得更快一些:

UPDATE product SET stock_status_id=5, quantity=0, status=0
 WHERE status <> 0
    OR quantity <> 0
    OR stock_status_id <> 5
更新产品集库存\状态\ id=5,数量=0,状态=0
其中状态0
或数量0
或库存状态id 5

这将避免更新已经重置的行。

您的
UPDATE
查询,按照您的公式,将更新表中的所有行。它以大约每两百微秒一行的速度运行。这是出色的表现

通过这样做,您可能会让它运行得更快一些:

UPDATE product SET stock_status_id=5, quantity=0, status=0
 WHERE status <> 0
    OR quantity <> 0
    OR stock_status_id <> 5
更新产品集库存\状态\ id=5,数量=0,状态=0
其中状态0
或数量0
或库存状态id 5

这将避免更新已经重置的行。

您的
UPDATE
查询,按照您的公式,将更新表中的所有行。它以大约每两百微秒一行的速度运行。这是出色的表现

通过这样做,您可能会让它运行得更快一些:

UPDATE product SET stock_status_id=5, quantity=0, status=0
 WHERE status <> 0
    OR quantity <> 0
    OR stock_status_id <> 5
更新产品集库存\状态\ id=5,数量=0,状态=0
其中状态0
或数量0
或库存状态id 5

这将避免更新已经重置的行。

您的
UPDATE
查询,按照您的公式,将更新表中的所有行。它以大约每两百微秒一行的速度运行。这是出色的表现

通过这样做,您可能会让它运行得更快一些:

UPDATE product SET stock_status_id=5, quantity=0, status=0
 WHERE status <> 0
    OR quantity <> 0
    OR stock_status_id <> 5
更新产品集库存\状态\ id=5,数量=0,状态=0
其中状态0
或数量0
或库存状态id 5

这将避免更新已重置的行。

您的
UPDATE
查询中的
WHERE
子句是什么?(可能您不打算更新所有行。)您提到了“使用的索引”。请确保您已经向我们显示了所有索引以及多列索引中的所有列。使用WHERE可以减少一点时间,但在我看来仍然很慢,因为我禁用了所有产品,然后从提要中获取产品,并更新提要中存在的产品的状态/库存/价格。。。整个过程大约需要20秒。您的
UPDATE
查询中的
WHERE
子句是什么?(可能您不打算更新所有行。)您提到了“使用的索引”。请确保您已经向我们显示了所有索引以及多列索引中的所有列。使用WHERE可以减少一点时间,但在我看来仍然很慢,因为我禁用了所有产品,然后从提要中获取产品,并更新提要中存在的产品的状态/库存/价格。。。整个过程大约需要20秒。您的
UPDATE
查询中的
WHERE
子句是什么?(可能您不打算更新所有行。)您提到了“使用的索引”。请确保您已经向我们显示了所有索引以及多列索引中的所有列。使用WHERE可以减少一点时间,但在我看来仍然很慢,因为我禁用了所有产品,然后从提要中获取产品,并更新提要中存在的产品的状态/库存/价格。。。整个过程大约需要20秒。您的
UPDATE
查询中的
WHERE
子句是什么?(可能您不打算更新所有行。)您提到了“使用的索引”。请确保您已经向我们显示了所有索引以及多列索引中的所有列。使用WHERE可以减少一点时间,但在我看来仍然很慢,因为我禁用了所有产品,然后从提要中获取产品,并更新提要中存在的产品的状态/库存/价格。。。整个过程大约需要20秒。我在WHERE条件下得到0.9-1.1秒,没有大的改进在WHERE条件下得到0.9-1.1秒,没有大的改进在WHERE条件下得到0.9-1.1秒,没有大的改进在WHERE条件下得到0.9-1.1秒,没有什么大的改进在这些条件下可以得到0.9-2.5秒。我认为索引“数量”和“库存状态”将有助于此查询,但在下一次更新时会增加很大的延迟