Sto costruendo un database MySQL che contiene voci su sottostringhe speciali di DNA in specie di lievito. La mia tabella è simile a questa:COUNT e GROUP BY sui campi di testo sembra 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 | |
+--------------+---------+------+-----+---------+-------+
Ci sono circa 1,8 milioni di record. In un tipo di query voglio vedere quante sottostringhe DNA associate a ciascun tipo di specie e regione, in modo da emettere questo query:
select species, region, count(*) group by species, region;
Le specie e le colonne regione avere solo due possibili voci (conservati/SCER per specie, e promotore/codifica per regione), ma questa query richiede circa 30 secondi.
È questo un normale periodo di attesa per questo tipo di query, date le dimensioni della tabella? È lento perché sto usando campi di testo invece di semplici valori interi o booleani (io preferisco i campi di testo come diversi ricercatori non CS useranno il DB). Altre idee e suggerimenti sarebbero benvenuti.
Si prega di scusa se questa è una domanda boneheaded, io sono un neofita SQL.
P.S. Ho anche visto this question ma la soluzione proposta non sembra rilevante per quello che sto facendo.
MODIFICA: La conversione di questi campi in VARCHAR ha ridotto il tempo di esecuzione a ~ 2,5 secondi. Nota, ho anche programmato la sincronizzazione con ENUM che ha avuto un tempismo simile.
Quale campo è la tua chiave primaria? –
Non ho una chiave primaria. Potrei farne artificialmente uno, ma sarebbe importante? – Rich