我正在构建一个MySQL数据库,其中包含有关酵母物种中DNA的特殊子串的条目。我的表如下所示:对文本字段COUNT和GROUP BY似乎很慢
+--------------+---------+------+-----+---------+-------+
| 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 | |
+--------------+---------+------+-----+---------+-------+
大概有180万条记录。在一个类型的查询我想看看有多少DNA子与各类型品种和区域相关的,所以我发出这个查询:
select species, region, count(*) group by species, region;
种类和地区列只有两个可能的条目(保守/ scer对于物种以及启动子/区域编码),但该查询大约需要30秒。
这是一个正常的时间期望这种类型的查询给定的表的大小?这是慢的,因为我使用文本字段而不是简单的整数或布尔值(我喜欢文本字段,因为几个非CS研究人员将使用数据库)。任何其他想法和建议都会受到欢迎。
请原谅,如果这是一个头脑问题,我是一名SQL初学者。
P.S.我也看到了this question,但提议的解决方案似乎与我正在做的事情没有关系。
编辑:将这些字段转换为VARCHAR将运行时间减少到约2.5秒。注意我也对它有相似时间的ENUM进行计时。
哪个字段是您的主键? – 2010-07-22 02:55:11
我没有主键。我可以人为制造一个,但它会影响吗? – Rich 2010-07-22 04:17:32