Estoy construyendo una base de datos MySQL que contiene entradas sobre subcadenas especiales de ADN en especies de levadura. Mi tabla se ve así:COUNT y GROUP BY en los campos de texto parece lento
+--------------+---------+------+-----+---------+-------+
| 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 | |
+--------------+---------+------+-----+---------+-------+
Hay aproximadamente 1,8 millones de registros. En un tipo de consulta Quiero ver cuántos sub-cadenas de ADN están asociados con cada tipo de especie y región, por lo que expido el presente consulta:
select species, region, count(*) group by species, region;
Las especies y columnas región tiene sólo dos posibles entradas (conservada/SCER para especies, y promotor/codificación para región) aún esta consulta toma alrededor de 30 segundos.
¿Es esta una cantidad de tiempo normal a esperar para este tipo de consulta dado el tamaño de la tabla? ¿Es lento porque estoy usando campos de texto en lugar de enteros simples o valores booleanos (prefiero campos de texto ya que varios investigadores que no son CS usarán la base de datos). Cualquier otra idea y sugerencia sería bienvenida.
Disculpe, por favor, si se trata de una pregunta objetiva, soy un neófito de SQL.
P.S. También he visto this question pero la solución propuesta no parece relevante para lo que estoy haciendo.
EDIT: Convirtiendo esos campos a VARCHAR redujo el tiempo de ejecución a ~ 2.5 segundos. Tenga en cuenta que también lo sincronicé contra ENUM que tuvieron un tiempo similar.
¿Qué campo es su clave principal? –
No tengo una clave principal. Podría hacer artificialmente uno, pero ¿importaría? – Rich