我在OpenCart中有一个OpenCart表,总共有57,000条记录。看上去:
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/>..。最后一个(带有"+")是多个字段的索引(我不知道它的技术名称)。
问题是,当我在该表上运行一个类似于"UPDATE stock_status_id=5,quantity=0,status=0“的查询时,我在0.8秒到1.5秒之间完成了PHP的microtime()函数。也许我有点疑神疑鬼,但似乎太多了。有什么办法可以提高更新时间吗?
LE:
我希望禁用该表中的所有产品,然后只更新那些活动的产品。我不知道这是否是最好的方法,但我认为最好是检查每一个。还有其他更快的方法吗?
发布于 2014-12-27 13:14:20
您的UPDATE查询(正如您所描述的那样)更新了表中的所有行。它以每200微秒左右一排的速度完成。这是出色的表现。
通过这样做,您可能可以让它跑得更快一些:
UPDATE product SET stock_status_id=5, quantity=0, status=0
WHERE status <> 0
OR quantity <> 0
OR stock_status_id <> 5这将避免更新已经重置的行。
发布于 2014-12-27 12:51:09
为什么不使用WHERE分块记录,使用WHERE子句将提高更新时间
试着像这样
UPDATE product SET stock_status_id=5, quantity=0, status=0
WHERE
status!=0;https://stackoverflow.com/questions/27667341
复制相似问题