0

为什么在几次循环迭代后我得到“复制到磁盘上的 tmp 表”?在最初的几次迭代中,我没有这个。表有 1000 万行或更多行。当我设置情人偏移时,循环执行更多迭代而无需“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 增加的偏移量运行此选择时,我看到使用了 temp 表。

4

0 回答 0