我目前有一个包含产品信息的表(AllProducts)。它有 16 列和大约 125000 行。
我需要在数据库中创建一个唯一值,因为表中没有唯一值。我无法使用自动增量功能,因为我的数据库每天都会被清空并再次填充(因此特定产品的 ID 会发生变化)。
我想使用 varchar 字段(url)作为唯一值。为了做到这一点,我创建了一个视图(AllProductsCategories),它确保 url 和 shop 的组合是唯一的。
select min(`a`.`insertionTime`) AS `insertionTime`,
`a`.`shop` AS `shop`,
min(`a`.`name`) AS `name`,
min(`a`.`category`) AS `category`,
max(`a`.`description`) AS `description`,
min(`a`.`price`) AS `price`,
`a`.`url` AS `url`,
avg(`a`.`image`) AS `image`,
min(`a`.`fromPrice`) AS `fromPrice`,
min(`a`.`deliveryCosts`) AS `deliveryCosts`,
max(`a`.`stock`) AS `stock`,
max(`a`.`deliveryTime`) AS `deliveryTime`,
max(`a`.`ean`) AS `ean`,
max(`a`.`color`) AS `color`,
max(`a`.`size`) AS `size`,max(`a`.`brand`) AS `brand`
from `AllProducts` `a` group by `a`.`url`,`a`.`shop`
order by NULL
这工作正常,但速度很慢。下面的查询需要 51 秒才能完成:
SELECT * FROM ProductsCategories ORDER BY NULL LIMIT 50
我对 MySQL 很陌生,并通过索引以下列进行了实验:类别、名称、url、shop 和 shop/url。
现在我的问题是:1)如果我想确保 url 字段是唯一的,这是正确的方法吗?我目前使用 group by 来合并有关一个 url 的所有信息。另一种方法可能是删除重复项(但不确定如何执行此操作)。2)如果当前的方法可以,我怎样才能加快这个过程?