我在 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: 在 t1中增加了 typedesc。我在查询中修改了它,但是这里没有。