Mysql函数花了太长时间

时间:2015-04-25 11:36:19

标签: mysql

我有一个名为'item'的表,大约有8500行,另一个名为'stock'的表存储了日期和位置的项目库存(我有2个库存位置)。

Stock表结构如下:

In [26]: np.count_nonzero(a[:2,:2])
Out[26]: 3

每当任何物品从 - 或 - 到商店移动时,都会在Stock表中插入一行,其中包含特定物品的更新库存数据。目前Stock表包含大约125,000行。

现在我有一个函数需要两个日期参数(adt_from和adt_to),并检索两个日期每个位置的每个项目的股票,即在每个位置打开和关闭项目库存,并对股票进行一些其他计算。 ..

下面是功能部分,需要花费非常长的时间(差不多15分钟)。

”      - 变量声明

stock_dt date           - Stores the Date of Stock,
loc_id varchar(3)       - Stores the Location of Stock,
item_id varchar(6)      - Stores the Item Code,
item_qty decimal(20,2)  - Stores the Item Stock Quantity,
item_cost decimal(20,2) - Stores the Item Stock Cost Value

股票表在stock_dt,loc_id和item_id上编入索引。

我尝试启用query_cache并将query_cache_size设置为128M,但似乎没有任何改进。

我评论了Stock上的2个查询,程序只需几秒钟即可完成剩余的执行。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我想这里的问题是由那些ORDER BY引起的。

假设你有(项目,地点,日期)的综合指数,我认为你需要

ORDER BY item desc, location desc, date desc

为了使搜索从正确的结束开始并在1次点击后返回。

原因是即使它会击中一个项目的复合索引(项目,位置,日期),它也会在最重要的列的方向上遍历索引(隐式ORDER BY项目ASC,位置ASC) 。因此,需要扫描整个项目的部分历史记录以获取最新记录。

我会尝试评论ORDER BY,看看是否是导致问题的原因。