我正在MySQL中运行报告。查询之一涉及将大量行插入到临时表中。当我尝试运行它时,出现以下错误:
错误代码1206:锁的数量超过了锁表的大小。
有问题的查询是:
create temporary table SkusBought(
customerNum int(11),
sku int(11),
typedesc char(25),
key `customerNum` (customerNum)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
insert into skusBought
select t1.* from
(select customer, sku, typedesc from transactiondatatransit
where (cat = 150 or cat = 151)
AND daysfrom07jan1 > 731
group by customer, sku
union
select customer, sku, typedesc from transactiondatadelaware
where (cat = 150 or cat = 151)
AND daysfrom07jan1 > 731
group by customer, sku
union
select customer, sku, typedesc from transactiondataprestige
where (cat = 150 or cat = 151)
AND daysfrom07jan1 > 731
group by customer, sku) t1
join
(select customernum from topThreetransit group by customernum) t2
on t1.customer = t2.customernum;
我读过更改配置文件以增加缓冲池大小会有所帮助,但这无济于事。作为临时替代方法或永久修复程序,将以何种方式解决此问题?
编辑:更改查询的一部分。不应该影响它,但是我做了一个查找替换所有操作,却没有意识到它把它搞砸了。不会影响这个问题。
编辑2:将typedesc添加到t1。我在查询中更改了它,但在这里没有更改。