gpt4 book ai didi

MySQL ORDER BY 非常慢。如何优化?

转载 作者:行者123 更新时间:2023-11-30 00:39:32 25 4
gpt4 key购买 nike

我正在寻找查询速度极慢的问题的解决方案,希望您能帮助我。

首先,我想做的是:
我有一个表,将其命名为 item_table,其中包含一些有关商品的信息。每个商品都有一个orderid。这里的问题是:此订单 ID 不唯一
项目的每一次变化都可以说是“逐步”记录的。这是一个例子:

             order_id     max_vol   remain_vol
Purchase 1 2007468329 8753 4126
Purchase 2 2007468329 8753 4122
Purchase 3 2007468329 8753 4006

稍微解释一下:
每次有人购买商品时,都会有一个具有相同订单 ID 和更改的剩余量 (remain_vol) 的新条目。 max_vol 是卖家开始时输入的库存总量。一个商品可以有多个订单 ID,但每次卖家插入商品(即使是同一商品)时,它都会获得一个新的订单 ID。

我现在想做的是:
我想要获得销量最高的商品。这意味着我只想获取 MAX(remain_vol)MIN(remain_vol) 之间的差异,并且我只想获取已售出的商品 (=max_vol) !=remain_vol)

更具体一点:
这是我的数据表的创建表:

CREATE TABLE `data` (    
`orderid` bigint(20) DEFAULT NULL,
`regionid` int(11) DEFAULT NULL,
`systemid` int(11) DEFAULT NULL,
`stationid` int(11) DEFAULT NULL,
`typeid` int(11) DEFAULT NULL,
`bid` int(11) DEFAULT NULL,
`price` float DEFAULT NULL,
`minvolume` int(11) DEFAULT NULL,
`volremain` int(11) DEFAULT NULL,
`volenter` int(11) DEFAULT NULL,
`issued` datetime DEFAULT NULL,
`duration` varchar(32) DEFAULT NULL,
`range` int(11) DEFAULT NULL,
`reportedby` int(11) DEFAULT NULL,
`reportedtime` datetime DEFAULT NULL,
KEY `orderid` (`orderid`) USING BTREE,
KEY `volremain` (`volremain`) USING BTREE,
KEY `volenter` (`volenter`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我提到的列max_row在表volenter中,remain_volvolremain

该表包含大约 6000 万个条目

有人知道如何解决这个问题吗?
我已经尝试过一些查询,但它们都需要很长时间才能执行。

亲切的问候并希望得到解决
- 天琴座

最佳答案

我认为问题在于你的表格的结构方式。当用户购买商品时,您不应向表中添加新条目。这种方法有很多问题。

首先,订单应该有一个唯一的订单 ID,除非有充分的理由不这样做。您应该做的是使订单 ID 唯一,并为其指定字段 init_volmax_volsold。当用户购买商品时,您会增加字段 sold。当您想要获得最畅销的商品时,您可以按已售出降序排列。

这样您就不会不必要地增加表。您的所有查询都变得更加简单和快捷。

关于MySQL ORDER BY 非常慢。如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888718/

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