我有一张动态变化的桌子。它可能有数千列。
每当我运行SQL查询时,我都需要一种方法来查找每列中的不同值。
答案 0 :(得分:0)
对于具有这么多列的表,没有可能的理由。您的架构设计是错误的。
凭借良好的硬件和适当的索引,mysql可以处理数百万甚至数亿行,但列是另一个故事。即使有成千上万列的设计理由,MySQL内部也存在禁止它的物理限制,大致如下(我的数据可能与最新版本的MySQL没有关系 - 我以后会尝试验证):
4096列:理论上或者很难'列数限制。
2,829列:myisam表的实际物理限制
1000列:innodb的硬限制
答案 1 :(得分:0)
假设您有一个表格如下
CREATE TABLE `table_no1` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`column0001` INT(11) NOT NULL DEFAULT '0',
`column0002` INT(11) NOT NULL DEFAULT '0'
`column0003` INT(11) NOT NULL DEFAULT '0'
`column0004` INT(11) NOT NULL DEFAULT '0'
.
.
.
`column2000` INT(11) NOT NULL DEFAULT '0'
PRIMARY KEY (`id`)
);
我还假设您有一个很好的程序来分析这些数据,并且您正在请求此查询。
您可以使用以下查询来获取不同的值
select DISTINCT(column0001) from table_no1;
select DISTINCT(column0002) from table_no1;
但那并不高效。因此,您需要使用您的程序动态创建此查询。为此,您必须动态查找列名称。为此,您可以使用以下查询
select COLUMN_NAME from information_schema.`COLUMNS`
where TABLE_SCHEMA='your_database_name' and TABLE_NAME='table_no1'
上面的查询将给出该表的列名。从中您可以动态创建不同的查询并检索单个列的不同值。