繁体   English   中英

优化MySQL UPDATE查询

[英]Optimize MySQL UPDATE Query

我正在尝试运行此查询,正在更新的表大约有10,000行。 该查询需要花费很长时间才能执行,以至于我什至不必费心等待返回。

在几个小时内,该表将有100,000行,因此,它所花的时间将比原来长10倍。 有人有什么想法可以优化吗?

UPDATE

`wpsapi4`.`product_details` AS `pd`,
`r2r`.`partmaster` AS `pm`,
`r2r`.`partpriceinv` AS `ppi`,
`r2r`.`manufacturer` AS `m`

SET

`pd`.`product_name`=`pm`.`ItemName`,
`pd`.`data_source`='R2R',
`pd`.`partmaster`=`pm`.`id`,
`pd`.`pu`=``.`ppi`.`DistributorPartNumberShort`,
`pd`.`description_raw`=`pm`.`ItemDescription`,
`pd`.`dealer_price`=`ppi`.`MSRP`,
`pd`.`weight`=`pm`.`Weight`,
`pd`.`vendor_name`=`m`.`ManufacturerName`

WHERE

(
`pm`.`ManufacturerNumberShort`=`pd`.`vendor_number`
OR
`pm`.`ManufacturerNumberLong`=`pd`.`vendor_number`
)
AND
`pm`.`id`=`ppi`.`DistributorPartNumberShort`
AND
`ppi`.`DistributorID`=2
AND
`pm`.`ManufacturerID`=`m`.`id`

如果您认为可能与表结构有关,那么请这样说,我现在不能真正更改结构,但是如果您知道索引应该在哪里,那就太好了。 索引已经在r2r数据库上进行了优化。

您正在对供应商编号进行“ OR ”操作,首先要确保两个表上的供应商编号都有索引。

在我看来,其他列已经应该具有索引。

要索引的列是where子句中的引用。

考虑添加以下内容:

  1. pm.ManufacturerNumberShort列上的索引。
  2. pm.ManufacturerNumberLong列上的索引。
  3. pm.id列上的索引。
  4. pm.ManufacturerID列上的索引。
  5. ppi.DistributorPartNumberShort列上的索引。
  6. ppi.DistributorID列上的索引。

根据Darhazer的输入:

考虑添加以下一项或多项:

  1. pm.ManufacturerNumberShort,pm.id和pm.ManufacturerID列上的索引。
  2. pm.ManufacturerNumberLong,pm.id和pm.ManufacturerID列上的索引。
  3. ppi.DistributorPartNumberShort和ppi.DistributorID列上的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM