我正在寻找查询速度极慢的问题的解决方案,希望您能帮助我。
首先,我想做的是:
我有一个表,将其命名为 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_vol是volremain。
该表包含大约 6000 万个条目。
有人知道如何解决这个问题吗?
我已经尝试过一些查询,但它们都需要很长时间才能执行。
亲切的问候并希望得到解决
- 天琴座
最佳答案
我认为问题在于你的表格的结构方式。当用户购买商品时,您不应向表中添加新条目。这种方法有很多问题。
首先,订单应该有一个唯一的订单 ID,除非有充分的理由不这样做。您应该做的是使订单 ID 唯一,并为其指定字段 init_vol
、max_vol
和 sold
。当用户购买商品时,您会增加字段 sold
。当您想要获得最畅销的商品时,您可以按已售出
降序排列。
这样您就不会不必要地增加表。您的所有查询都变得更加简单和快捷。
关于MySQL ORDER BY 非常慢。如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888718/