为什么我在循环几次迭代后得到“复制到磁盘上的tmp表”

时间:2013-08-26 11:49:19

标签: mysql loops temp-tables

为什么我得到"复制到磁盘上的tmp表"经过几次迭代循环?在最初的几次迭代中,我没有这个。表有1000万行以上。当我设置lover offset时,循环执行更多迭代而不使用" tmp table"。

我的选择是

SELECT u.domena_id, u.umiestnenie, u.datum 
FROM (SELECT domena_id, min(datum) as min_datum 
FROM umiestnenie
WHERE datum BETWEEN 'date1' AND 'date2'
GROUP BY domena_id 
LIMIT 200000
OFFSET offset (increasing in lopp)
) x 
INNER JOIN umiestnenie u ON u.domena_id = x.domena_id and u.datum = x.min_datum

表umiestnenie

CREATE TABLE IF NOT EXISTS `umiestnenie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `domena_id` int(11) NOT NULL,
  `datum` date NOT NULL,
  `umiestnenie` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_umiestnenie_domeny_idx` (`domena_id`),
  KEY `datum_idx` (`datum`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15243077 ;

表格现象

CREATE TABLE IF NOT EXISTS `domena` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazov` varchar(200) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nazov` (`nazov`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15343156 ;

为什么当我运行此选择一次时,它不需要临时表,当我运行此选择更多次时它?

这是我的选择

的解释
1   PRIMARY <derived2>  ALL NULL    NULL    NULL    NULL    1000000 
1   PRIMARY u   ref domena_id_idx   domena_id_idx   4   x.domena_id 7   Using where
2   DERIVED umiestnenie index   NULL    domena_id_idx   4   NULL    20109031    Using where

这里不是tmp表,但是当我运行这个带有增加的php偏移量的select时,我看到使用临时表。

0 个答案:

没有答案