gpt4 book ai didi

mysql - 慢查询: Data categorization

转载 作者:行者123 更新时间:2023-11-30 01:24:27 24 4
gpt4 key购买 nike

我目前有一个包含产品信息的表(AllProducts)。它有 16 列,大约 125000 行。

我需要在数据库中创建一个唯一值,因为表中没有唯一值。我无法使用自动增量功能,因为我的数据库每天都会被清空并再次填充(因此特定产品的 ID 会发生变化)。

我想使用 varchar 字段(url)作为唯一值。为了做到这一点,我创建了一个 View (AllProductsCategories),它确保 url 和商店的组合是唯一的。

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)如果当前的方法可以,我怎样才能加快这个过程?

最佳答案

如果每天都会重新加载数据,那么您应该在重新加载时修复它。

也许这是不可能的。我建议采用以下方法,假设三重 urlshopInsertionTime 是唯一的。首先,在 url、shop、InsertionTime 上构建索引。然后使用这个查询:

select ap.*
from AllProducts ap
where ap.InsertionTime = (select InsertionTime
from AllProducts ap2
where ap2.url = ap.url and
ap2.shop = ap.shop
order by InsertionTime
limit 1
);

MySQL 不允许在 View 的 from 子句中使用子查询。它确实允许它们出现在 selectwhere (和 having)子句中。这应该循环遍历表,对每一行进行索引查找,只返回插入时间最短的行。

关于mysql - 慢查询: Data categorization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com