Buduję bazę danych MySQL, która zawiera wpisy o specjalnych podciągach DNA w gatunkach drożdży. Moja tabela wygląda następująco:COUNT i GROUP BY na polach tekstowych wydaje się powolny
+--------------+---------+------+-----+---------+-------+
| 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 | |
+--------------+---------+------+-----+---------+-------+
Istnieje około 1,8 miliona rekordów. W jednym rodzaju zapytania Chcę zobaczyć ile DNA podciągi są związane z każdego rodzaju gatunków i regionu, więc wydaj zapytanie:
select species, region, count(*) group by species, region;
gatunku i kolumny regionie tylko dwie możliwe pozycje (konserwowany/scer dla gatunków i promotora/kodowania regionu), ale to zapytanie zajmuje około 30 sekund.
Czy jest to normalny czas oczekiwania na tego typu zapytanie, biorąc pod uwagę rozmiar tabeli? Czy to jest powolne, ponieważ używam pól tekstowych zamiast prostych wartości całkowitych lub boolowskich (wolę pola tekstowe, ponieważ kilku badaczy spoza CS będzie używało DB). Wszelkie inne pomysły i sugestie byłyby mile widziane.
Proszę wybaczyć, jeśli jest to pytanie z głową kości, jestem neofitą SQL.
P.S. Widziałem także this question, ale proponowane rozwiązanie nie wydaje się odpowiednie dla tego, co robię.
EDYTOWANIE: Konwersja tych pól na VARCHARs zmniejszyła czas wykonywania do ~ 2,5 sekundy. Zauważ, że ja również wyliczyłem to w stosunku do ENUM, które miały podobny czas.
Które pole jest twoim głównym kluczem? –
Nie mam klucza podstawowego. Mógłbym sztucznie to zrobić, ale czy to miało znaczenie? – Rich