如何使用MYSQL

时间:2015-11-26 02:57:25

标签: mysql sql distinct

我有一张动态变化的桌子。它可能有数千列。

每当我运行SQL查询时,我都需要一种方法来查找每列中的不同值。

2 个答案:

答案 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'

上面的查询将给出该表的列名。从中您可以动态创建不同的查询并检索单个列的不同值。