文本字段上的COUNT和GROUP BY似乎很慢

Ric*_*ich 6 mysql sql database query-optimization aggregate-functions

我正在构建一个MySQL数据库,其中包含有关酵母种类中DNA的特殊子串的条目.我的表看起来像这样:

+--------------+---------+------+-----+---------+-------+
| Field        | Type    | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| species      | text    | YES  | MUL | NULL    |       |
| region       | text    | YES  | MUL | NULL    |       |
| gene         | text    | YES  | MUL | NULL    |       |
| startPos     | int(11) | YES  |     | NULL    |       |
| repeatLength | int(11) | YES  |     | NULL    |       |
| coreLength   | int(11) | YES  |     | NULL    |       |
| sequence     | text    | YES  | MUL | NULL    |       |
+--------------+---------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

大约有180万条记录.在一种类型的查询中,我想看看有多少DNA子串与每种物种和区域相关联,因此我发出以下查询:

select species, region, count(*) group by species, region;
Run Code Online (Sandbox Code Playgroud)

物种和区域列只有两个可能的条目(物种的保守/ scer,以及区域的启动子/编码),但此查询大约需要30秒.

考虑到表的大小,这是期望这种类型的查询的正常时间吗?它是否很慢因为我使用的是文本字段而不是简单的整数或布尔值(我更喜欢文本字段,因为几个非CS研究人员将使用数据库).欢迎任何其他想法和建议.

请原谅这是一个愚蠢的问题,我是一个SQL新手.

PS我也看到了这个问题,但提议的解决方案似乎与我正在做的事情无关.

编辑:将这些字段转换为VARCHAR会将运行时间缩短到约2.5秒.注意我也是针对具有相似时序的ENUM计时的.

OMG*_*ies 6

为什么所有基于字符串的列都定义为TEXT?如果您阅读性能比较,您将看到TEXT比使用相同索引的VARCHAR列慢约3倍:http://forums.mysql.com/read.php?24,105964,105964