Работа с большой базой (MySQL и прочие)

Crucifer

Client
Регистрация
23.06.2014
Сообщения
120
Благодарностей
82
Баллы
28
Ребята, а кто работает с большими базами может подскажете куда двигаться?

Ну вот запихнул данные в базу MySQL 5.7. Всё в принципе нормально запрашивалось на 500к тестовых строках в базе. Залил всю базу на 130кк строк и теперь SELECT вываливается через минуту в - Выполнение действия Db Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

Что-то можно решить настройками mysql или доп настройками запроса, подставлял timeout в строке подключения зенки, похоже он не играет роли.
Или нужно такую базу крутить на гораздо более мощном процессоре с большей оперативкой. Или даже нужно смотреть в сторону более производительных postgre и mongodb?
Меня бы в принципе устроил селект по запросу даже секунд в 10. В этом запросе это не критично.
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
Индексы есть?
 

Crucifer

Client
Регистрация
23.06.2014
Сообщения
120
Благодарностей
82
Баллы
28

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
Если в кратце, то индекс, это поле по которому оптимизирован(ускорен) поиск.

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


 
  • Спасибо
Реакции: Crucifer и Koqpe

Crucifer

Client
Регистрация
23.06.2014
Сообщения
120
Благодарностей
82
Баллы
28
Если в кратце, то индекс, это поле по которому оптимизирован(ускорен) поиск.

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


Спасибо за подсказку я понял. Уже попробовал, тип данных и длина не подходит для создания индекса. Сейчас грохну таблицу и заново создам с новыми условиями. И запущу создание индекса. Как думаете насколько ускорит селект из таблицы с созданным индексом, учитывая что нет повторяющихся данных в таблице?
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
Можешь показать с чем идет работа?
1. пример запроса
2. структуру таблицы
3 сами данные: пару -тройку записей в таблице
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
  • Спасибо
Реакции: Crucifer

Crucifer

Client
Регистрация
23.06.2014
Сообщения
120
Благодарностей
82
Баллы
28
Может настроить MySQL сервер корректно?
Ну и сам запрос тоже возможно не совсем корректен.
Да в принципе все дело в индексах было в этой таблице. Спасибо Manfred.
Стоило только правильно создать индексы и всё. Запрос за 0,003 секунды проходит.

Но чем дальше разрастается база и я погружаюсь в mysql то появляются другие проблемы.
Если изначально создать индекс на нужную колонку, то при работе с LOAD DATA с заливкой данных в таблицу, я так понимаю сразу происходит и создание индекса новых данных. Что постепенно начинает тормозить работу.
Примерно расширение базы на 100 мб данных дает увеличение запроса с заливкой данных через LOAD DATA на секунду. И соответственно уже после создания базы в 7 гб начинаются - Db Timeout expired.
Пока придумал только что сначала заливаю базу без индекса, а потом уже запускаю создание индекса.

Пробовал создавать большую базу на mysql 8.0 но началось жуткое использование оперативной памяти уже на 500кк строчках. Поэтому вернулся обратно на 5.7 и полет вроде нормальный.

И задумался как грамотно перенести базу на другой диск, потому как системный всего на 256 гб.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)