优化MySQL UPDATE查询

时间:2011-10-02 20:08:04

标签: mysql

我正在尝试运行此查询,并且正在更新的表大约有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数据库上进行了优化。

2 个答案:

答案 0 :(得分:0)

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

在我看来,其他列已经有了索引。

答案 1 :(得分:0)

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

考虑添加以下内容:

  1. pm.ManufacturerNumberShort列的索引。
  2. pm.ManufacturerNumberLong列的索引。
  3. pm.id列的索引。
  4. pm.ManufacturerID列的索引。
  5. ppi.DistributorPartNumberShort列的索引。
  6. ppi.DistributorID列的索引。
  7. 根据Darhazer的输入:

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

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