Ich baue eine MySQL-Datenbank, die Einträge über spezielle Teilstrings der DNA in Hefearten enthält. Meine Tabelle sieht so aus:COUNT und GROUP BY auf Textfelder scheint langsam
+--------------+---------+------+-----+---------+-------+
| 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 | |
+--------------+---------+------+-----+---------+-------+
Es gibt etwa 1,8 Millionen Datensätze. In einer Art der Abfrage mag ich, wie viele DNA-Strings sehen, mit jeder Art von Art und Region verbunden sind, so dass ich ausgeben diese Abfrage:
select species, region, count(*) group by species, region;
Die Art und Region Spalten hat nur zwei mögliche Einträge (konserviert/SCER für Arten und Promoter/Codierung für die Region) noch dauert diese Abfrage etwa 30 Sekunden.
Ist das eine normale Menge an Zeit für diese Art von Abfrage angesichts der Größe der Tabelle zu erwarten? Ist es langsam, weil ich Textfelder anstelle von einfachen Integer- oder booleschen Werten verwende (ich bevorzuge Textfelder, da mehrere Nicht-CS-Forscher die DB verwenden). Alle anderen Ideen und Vorschläge wären willkommen.
Bitte entschuldigen Sie, wenn dies eine knochenharte Frage ist, bin ich ein SQL-Neophyt.
P.S. Ich habe auch gesehen this question, aber die vorgeschlagene Lösung scheint nicht relevant für das, was ich tue.
EDIT: Die Konvertierung dieser Felder in VARCHARs reduziert die Laufzeit auf ~ 2,5 Sekunden. Hinweis: Ich habe es auch mit ENUMs zeitlich abgestimmt, die ein ähnliches Timing hatten.
Welches Feld ist Ihr Primärschlüssel? –
Ich habe keinen Primärschlüssel. Ich könnte das künstlich machen, aber wäre das wichtig? – Rich