为什么我得到"复制到磁盘上的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时,我看到使用临时表。