【发布时间】:2011-03-19 08:08:57
【问题描述】:
我正在构建一个 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 | |
+--------------+---------+------+-----+---------+-------+
大约有 180 万条记录。在一种类型的查询中,我想查看有多少 DNA 子串与每种类型的物种和地区相关联,因此我发出以下查询:
select species, region, count(*) group by species, region;
物种和区域列只有两个可能的条目(物种的保守/scer,区域的启动子/编码)但此查询大约需要 30 秒。
考虑到表的大小,这是否是此类查询的正常预期时间?是不是很慢,因为我使用的是文本字段而不是简单的整数或布尔值(我更喜欢文本字段,因为一些非 CS 研究人员将使用数据库)。欢迎任何其他想法和建议。
如果这是一个愚蠢的问题,请原谅,我是 SQL 新手。
附:我也见过this question,但建议的解决方案似乎与我正在做的事情无关。
编辑:将这些字段转换为 VARCHAR 可将运行时间缩短至约 2.5 秒。请注意,我还针对具有类似时间的 ENUM 进行了计时。
【问题讨论】:
-
哪个字段是你的主键?
-
我没有主键。我可以人工制造一个,但这有关系吗?
标签: sql mysql database query-optimization aggregate-functions