Как ускорить mysql?

Подскажите как быть ?
Есть таблица 500 миллионов строк.
Запускаю выборку (жду пол минуты) получаю значения.
При этом проц и оперативка не напрягаются (выборка происходит по полям с индексами)
Как заставить Mysql использовать полные ресурсы пк и может ли это повлиять на скорость работы бд? Просто загруженность процессора стоит на уровни 5% процентов и все и оперативка тоже не дергается
  • Вопрос задан
  • 542 просмотра
Пригласить эксперта
Ответы на вопрос 5
FanatPHP
@FanatPHP
Чебуратор тега РНР
Любые вопросы про "ускорение mysql" необходимо сопровождать не голословными заявлениями "Слющай, использует индексы, мамом клянус!", а ВЫВОДОМ EXPLAIN
Без которого вопрос в принципе не имеет смысла, и должен удаляться.

Плюс неплохо сразу выкатить результат SHOW ENGINE INNODB STATUS
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Можно воспользоваться MySQLTuner проверить что можно оптимизировать в конфигурации MySQL
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
Не так важно сколько строк в таблице, сколько их размер, чтобы говорить про оперативку.

500 млн строк длинной в 10 символов может быть всего лишь 5 гб, и полностью влезать в оперативку почти любого домашнего компа. Можно посмотреть размер базы, поправить настройки mysql.

Но правильнее будет проанализировать запрос, возможно построить правильные индексы руками.
Ответ написан
Комментировать
При таких объемах часто применяются всякие денормализации чтобы не было фуллскана, с индексами нужно копаться, запросы иногда писать иначе, может у вас там сотня JOIN в которых связь идет не по ключам, а по простым текстовым полям или еще какие то штуки, при 100к записей незаметно было, а при 500м стало.
ну и как люди выше написали - профилируйте..

И еще кстати, если ваш селект возвращает ну к примеру 100 миллионов из ваших 500, то надо лимит применять, там узким местом может быть уже сетевой стек.
Ответ написан
Комментировать
@mitya_k
  1. Поля по которым идет поиск должны быть в индексе. Смотри explain и на селективность индексов
  2. Для уменьшения области поиска можно использовать партицирование https://dev.mysql.com/doc/refman/8.0/en/partitioni...
  3. Смотри на настройки в my.conf. Там по дефолту мало системных ресурсов выдается для БД
  4. Ну, и диск желательно иметь ssd
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы