Я создаю базу данных 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 секунд. Обратите внимание, что я также синхронизировал его против ПЕРЕЧИСЛЕНИЙ, которые имели подобную синхронизацию.