【发布时间】:2014-02-19 18:05:27
【问题描述】:
我正在为我的查询速度极慢的问题寻找解决方案,希望您能帮助我。
首先,我想做的是:
我有一张桌子,我们将其命名为 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 万个条目。
有人知道如何解决这个问题吗?
我已经尝试了一些查询,但它们都需要很长时间才能执行。
亲切的问候并希望得到解决方案
- 天琴座
【问题讨论】:
-
您尝试优化什么 SQL?
-
您是否设置了任何索引?
-
@AlmaDo 我正在使用 MySQL 5.6.16。
-
@WillP。如您所见,我已经在 orderid、volremain 和 volenter 上设置了密钥。我没有主键。
-
ic,我也认为 Alma 的意思是您要优化什么查询
标签: mysql sql performance optimization bigdata