MySQL сократить время, необходимое для выбора запроса

0

У меня есть таблица с 700000 строк и 400 столбцов с индексированным столбцом, а другие столбцы динамические.

когда я просто даю

select * from table

это занимает более 4 минут. Таблица с движком myisam, и я попытался увеличить key_buffer_size что мало помогло. Какие еще параметры я могу оптимизировать, чтобы быстрее получить его?

  • 0
    Определить узкое место. Вероятными виновниками могут быть ввод / вывод (хранится ли он на быстром SSD или на медленном вращающемся диске?), Время передачи (по сети?) И обработка результата клиентом. И определите, какой должна быть приемлемая производительность. (Сколько времени нужно, чтобы вернуть 280 000 000 значений?)
Теги:

1 ответ

5

Самая большая проблема при выполнении запроса - это просто заполнение ответа. Независимо от того, какая базовая эффективность находится под таблицей, и даже если имеется очень мало полей с данными, у вас будет запись из 400 ячеек для каждой строки, которая у вас есть в таблице, - поэтому вам нужно отправить 280M ячеек в 4 минут, что означает ~ 1M клеток/сек.

key_buffer_size ничего не сделает, поскольку вы просто потоковеете свой файл таблицы (.MYD), который не кэшируется в кеш кеша и только буферы ОС.

Итак, если вы хотите сделать это быстрее, вы можете либо захотеть:

  • уменьшите количество столбцов, которые вы читаете, не прочитав *, но указав отдельные столбцы
  • уменьшить количество столбцов, которые у вас есть в таблице.
  • читать меньше строк

Если вы не хотите ничего из вышеперечисленного и хотите, чтобы ваша рабочая нагрузка была быстрее, вам нужно делать чтение параллельно.

Если вы обычно не фильтруете/индексируете значения ваших столбцов, вы можете иметь их в поле BLOB, упакованном любым другим способом (Thrift, Protobufs, JSON и т.д.), Таким образом, считывание этих данных не вызовет накладные расходы безумного протокола, и вы сможете быстрее читать таблицу.

  • 0
    я попытаюсь загрузить его как BLOB-объект, но это импорт CSV-файла, который я хочу использовать позже для ETL, поэтому таблице нужны все строки и столбцы, и я должен использовать '*'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню