У меня есть база данных MySQL, которая имеет несколько таблиц. Запрашиваемый SQL-запрос займет более 5 минут. Одна запрашиваемая таблица - «DeviceInfo» и имеет более 21 миллиона записей.Запрос Mysql занимает более 5 минут
Приложение (C#), выполняющее этот запрос, получает таймаут во время выполнения запроса.
Я увеличил innodb_buffer_pool_size = 64M до 1G в My.ini для MySQl.
Как уменьшить время выполнения.
SELECT DISTINCT(pd.PatientId) FROM DeviceInfo di
JOIN DeviceSession ds ON ds.DeviceSessionID = di.ByDevSessionId
JOIN UserSession us ON us.UserSessionId = ds.ByUserSessionId
JOIN PatientDetails pd ON pd.PatientDetailsId = us.ByPatientId
WHERE di.SyncStatus = 0 ORDER BY us.UserStartSessionTime Desc
Таблица DeviceInfo имеет 21,850,806 записей
У вас есть индекс? Постарайтесь установить его на всех идентификаторах, к которым вы присоединяетесь. Я думаю, что это решит вашу проблему. –
запустите 'explain select ....' и поделитесь результатом с вопросом. –
Можете ли вы предоставить определения таблиц для каждой из этих таблиц? Вы можете сделать это, выполнив команду «SHOW CREATE TABLE my_table;» –