КОЛИЧЕСТВО и GROUP BY на текстовых полях кажутся медленными

Я создаю базу данных 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    |       |
+--------------+---------+------+-----+---------+-------+

Существует приблизительно 1,8 миллиона записей. В одном типе запроса я хочу видеть, сколько подстрок DNA связано с каждым типом разновидностей и региона, таким образом, я выпускаю этот запрос:

select species, region, count(*) group by species, region;

Разновидности и столбцы региона имеют только две возможных записи (conserved/scer для разновидностей и покровителя/кодирования для региона) все же, этот запрос занимает приблизительно 30 секунд.

Действительно ли это - нормальное количество времени для ожидания для этого типа запроса, учитывая размер таблицы? Это медленно, потому что я использую текстовые поля вместо простых целочисленных или булевых значений (я предпочитаю текстовые поля, поскольку несколько исследователей неCS будут использовать DB). Любые другие идеи и предложения приветствовались бы.

Извините, если это - глупый вопрос, я - новичок SQL.

P.S. Я также видел этот вопрос, но предлагаемое решение не кажется важным для того, что я делаю.

Править: Преобразование тех полей к VARCHARs уменьшило время выполнения до ~2.5 секунд. Обратите внимание, что я также синхронизировал его против ПЕРЕЧИСЛЕНИЙ, которые имели подобную синхронизацию.

6
задан Community 23 May 2017 в 11:47
поделиться