什么索引会加速这个MySQL声明

时间:2017-08-20 20:17:06

标签: mysql

我需要更改数据库中的表格,以便针对特定项目supplier存储更多信息。我有一张表如下:

产品(~285000行)

  • PRODUCT_ID
  • supplier_name
  • 条形码
  • ...

想再创建两个表:

供应商

  • supplier_id(UUID
  • name( from product table
  • 接触
  • ...

供应商产品

  • product_id(产品FK
  • supplier_id(供应商FK
  • 送货方式
  • ...

supplier表需要填充supplier_name表中product的不同条目。然后supplier_product表需要UUID表中的supplier

到目前为止我的SQL是:

INSERT INTO supplier (name, id)
SELECT DISTINCT(TRIM(supplier)), UUID() FROM product
WHERE supplier_name IS NOT NULL AND TRIM(supplier_name) != ""
AND TRIM(supplier_name) NOT IN (
    SELECT name FROM supplier
);

创建~4000行。然后:

INSERT INTO supplier_product (id, supplier_id, product_id, barcode, ...)
SELECT UUID(), s.id, p.product_id, p.barcode, ...
  FROM product p
  INNER JOIN supplier s ON TRIM(p.supplier_name) = s.name
  WHERE s.name IS NOT NULL;

查询目前在30秒后超时。是否有更好的方法来填充这两个表?

创建更多这样的表是我经常遇到的模式,所以如果有更优化的方法,我会很感激。

1 个答案:

答案 0 :(得分:0)

我在name表格的supplier列中添加了一个索引,不再看到超时。我可以在INSERT运行后删除此索引。