首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >慢表更新

问慢表更新
EN

Stack Overflow用户
提问于 2014-12-27 12:43:28
回答 2查看 63关注 0票数 0

我在OpenCart中有一个OpenCart表,总共有57,000条记录。看上去:

代码语言:javascript
复制
 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   

使用的索引:

代码语言:javascript
复制
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/>

..。最后一个(带有"+")是多个字段的索引(我不知道它的技术名称)。

问题是,当我在该表上运行一个类似于"UPDATE stock_status_id=5,quantity=0,status=0“的查询时,我在0.8秒到1.5秒之间完成了PHP的microtime()函数。也许我有点疑神疑鬼,但似乎太多了。有什么办法可以提高更新时间吗?

LE:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-27 13:14:20

您的UPDATE查询(正如您所描述的那样)更新了表中的所有行。它以每200微秒左右一排的速度完成。这是出色的表现。

通过这样做,您可能可以让它跑得更快一些:

代码语言:javascript
复制
UPDATE product SET stock_status_id=5, quantity=0, status=0
 WHERE status <> 0
    OR quantity <> 0
    OR stock_status_id <> 5

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

票数 1
EN

Stack Overflow用户

发布于 2014-12-27 12:51:09

为什么不使用WHERE分块记录,使用WHERE子句将提高更新时间

试着像这样

代码语言:javascript
复制
UPDATE product SET stock_status_id=5, quantity=0, status=0 
    WHERE 
status!=0;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27667341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档