好吧,我正在开发一个客户项目,他们有两个视图(视图 A 和视图 B),每个视图有 1029 列。现在他们希望我为视图 A 和视图 B 创建另一个主视图(因为视图相同,因此可以执行合并)。现在,当您分别查询视图 A(1029 列)和视图 B(1029 列)时,它加载得很好。
但是,当我对视图 A + 视图 B 进行并集时,它不起作用并给出错误:列太多。由于它是一个联合,所以组合后的主视图仍然只有 1029 列,但我仍然无法理解的是,为什么当我单独对视图 A 或视图 B 执行选择命令时它会起作用,但当我执行 UNION 时,那么它给出了太多列错误?
注意:主创建视图查询已成功运行,我收到的错误是在创建视图后运行任何选择命令时出现的错误。
查询:
UNION ALL
CREATE OR REPLACE VIEW ViewX AS
SELECT * FROM ViewA
UNION ALL
SELECT * FROM ViewB;
然后我得到了这个SELECT ID FROM ViewX LIMIT 1
额外:
连接表创建Error 1117: Too many columns
的逻辑如下:
ViewA
每个表有 4096 列的硬性限制,但对于给定表,有效最大值可能会更少。确切的限制取决于几个相互作用的因素。
每个表(无论存储引擎如何)的最大行大小为 65,535 字节。存储引擎可能会对此限制施加额外的限制,从而减少有效的最大行大小。
最大行大小限制了列的数量(以及可能的大小),因为所有列的总长度不能超过此大小。
...
各个存储引擎可能会施加额外的限制来限制表列数。例子:
InnoDB 允许最多 1000 列。