我在MySQL服务器上有一组三个InnoDB表,我在其上做了一个简单的SELECT。
SELECT s.type, s.Price,l.ratio, o.type,
FROM Structures s, Orders o, Legs l
WHERE s.type in ('type1','type2',...)
AND o.ID >= s.ID* 10
AND o.ID<= s.ID * 10 + s.orderNumber -1
AND l.ID >= s.ID * 10
AND l.ID <= s.ID * 10 + s.legNumber -1
ORDER BY s.type, s.FurthestExpiration, s.NearestExpiration
添加了一定数量的行(大约1,800个结构,3,000个腿和订单),我无法执行此请求,我在MySQL工作台中看到请求的状态是
Copying to the tmp table.
请求永远不会完成。
一些评论:
我并不真正关心使用InnoDB或MyISAM,但我不确定是否与InnoDB不兼容,我怀疑我的数据库参数/设计存在一些问题。
感谢您的任何线索!
答案 0 :(得分:0)
我不确定我是否同意这是一个“简单选择”。你想在这做什么?因为如果我正确地看到这一点,这将是一个巨大的(隐式)连接。你加入时说的是:FROM Structures s, Orders o, Legs l
,但没有s.id = o.id
种类,只有比较。你的结果集有多大?也可能没有简单的索引,但您必须检查EXPLAIN
。
无论如何,我认为没有理由它永远不会完成,尽管由于查询本身不是非常有效,因此在Copying to the tmp table.
状态结束之前可能需要很长时间。 (显然取决于事实如果查询效率低下:))
也许你在这个行数上达到某种限制(缓存,内存等),所以它开始变得非常慢,看起来它还没有完成。
我的建议是尽可能地进行一些显式连接(table1 t1 JOIN table2 t2 ON t1.id = t2.id
),或至少检查查询的“重”程度。