У меня есть таблица с 700000 строк и 400 столбцов с индексированным столбцом, а другие столбцы динамические.
когда я просто даю
select * from table
это занимает более 4 минут. Таблица с движком myisam, и я попытался увеличить key_buffer_size
что мало помогло. Какие еще параметры я могу оптимизировать, чтобы быстрее получить его?
Самая большая проблема при выполнении запроса - это просто заполнение ответа. Независимо от того, какая базовая эффективность находится под таблицей, и даже если имеется очень мало полей с данными, у вас будет запись из 400 ячеек для каждой строки, которая у вас есть в таблице, - поэтому вам нужно отправить 280M ячеек в 4 минут, что означает ~ 1M клеток/сек.
key_buffer_size ничего не сделает, поскольку вы просто потоковеете свой файл таблицы (.MYD), который не кэшируется в кеш кеша и только буферы ОС.
Итак, если вы хотите сделать это быстрее, вы можете либо захотеть:
Если вы не хотите ничего из вышеперечисленного и хотите, чтобы ваша рабочая нагрузка была быстрее, вам нужно делать чтение параллельно.
Если вы обычно не фильтруете/индексируете значения ваших столбцов, вы можете иметь их в поле BLOB, упакованном любым другим способом (Thrift, Protobufs, JSON и т.д.), Таким образом, считывание этих данных не вызовет накладные расходы безумного протокола, и вы сможете быстрее читать таблицу.