MySQL - крайне неэффективный и ненадежный запрос, объединяющий 3 таблицы - как улучшить? - PullRequest
0 голосов
/ 18 октября 2018

Я использую MySQL с движком INNODB на машине DigitalOcean.Машина имеет 4 ГБ памяти, 80 ГБ ДИСКА и 2 vCPU и работает на Ubuntu 16.04.

У нас есть запрос, который объединяет три таблицы, которые выполняются очень медленно (возврат занимает около 5 минут, если он вообще работает).Размер таблиц составляет 6 миллионов, 20 миллионов и 100 тысяч строк соответственно, , и в таблицах для каждой строки есть уникальные индексы.

Запрос выглядит следующим образом:

SELECT *, table2.column1
FROM table1 
INNER JOIN table2 on table1.column1 = table2.column1
INNER JOIN table3 on table1.column2 = table3.column1 
WHERE table3.column2 == "{ID}";

Мы хотим встроить этот запрос в конвейер обработки / анализа данных, который динамически вытягивает соответствующие данные в память, а затем выполняет дальнейший анализ с использованием R.с этой целью нам нужно сделать этот запрос [или альтернативу, которая делает то же самое] более эффективным.

У кого-нибудь есть идеи относительно того, как сделать этот запрос более эффективным, или каковы причины этого замедления?Любая помощь будет принята с благодарностью,

Большое спасибо!

1 Ответ

0 голосов
/ 18 октября 2018

Для этого запроса:

select table1.*, table2.column1
from table1 inner join
     table2
     on table1.column1 = table2.column1 inner join
     table3
     on table1.column2 = table3.column1
where table3.column2 = "{ID}";

Требуются индексы для:

  • table3(column2, column1)
  • table1(column2, column1)
  • table2(column1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...