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