Я строю базу данных MySQL, которая содержит записи о специальных подстроках ДНК у видов дрожжей.Моя таблица выглядит так:
+--------------+---------+------+-----+---------+-------+
| 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 миллиона записей.В одном типе запроса я хочу увидеть, сколько ДНК-подстрок связано с каждым типом вида и региона, поэтому я задаю этот запрос:
select species, region, count(*) group by species, region;
В столбцах вида и региона есть только две возможные записи (сохранено/ scer для видов и промоутер / кодирование для региона), но этот запрос занимает около 30 секунд .
Это нормальное количество времени, которое можно ожидать для этого типа запроса, учитывая размерстол?Это медленно, потому что я использую текстовые поля вместо простых целочисленных или логических значений (я предпочитаю текстовые поля, поскольку некоторые исследователи, не относящиеся к CS, будут использовать БД).Любые другие идеи и предложения приветствуются.
Пожалуйста, извините, если это вопрос с тупой головой, я неофит SQL.
PS Я также видел этот вопрос но предложенное решение не похоже на то, что я делаю.
РЕДАКТИРОВАТЬ: Преобразование этих полей в VARCHAR сократило время выполнения до ~ 2,5 секунд.Обратите внимание, что я также рассчитал время для ENUM, которые имели схожую синхронизацию.