У меня есть приложение, которое имеет таблицу установки и таблицу использования.Как может быть более эффективный запрос, чем Left Outer Join
Я хочу, чтобы проверить информацию установки, и посмотреть, как многие из них до сих пор активны
select i.source,count(i.app_id),count(distinct u.app_id) from appinstall i
left outer join appuse u
on i.app_id = u.app_id
where a.timestamp > '2015-01-01 00:00:00'
and u.timestamp > (last 3 days)
group by i.source
Viola, я фактически убил мои RDS чтения реплики. Тайм-аут. Gameover
Таким образом, проблема заключается в том, что обе таблицы составляют около 1 миллиона строк. Вышеуказанные поля индексируются. Проблема заключается в том, что они различны, и их убивают.
Возможно ли сделать запрос FIRST перед соединением и использовать данные в этом? Если да - то, что называется? Или я столкнусь с этим. не используя SQL для этого, независимо от того, что будет убивать себя - лучше просто использовать веб-приложение или какой-либо другой двигатель для хранения данных, чтобы сообщить>
Примечание Innodb, MySQL 5.6
Ваша ВНУТРЕННЯЯ СОЕДИНЕННОСТЬ отображается как ВХОДНАЯ ВСТУПЛЕНИЕ, поэтому, если вы счастливы, что результирующий набор так же, как вы ожидаете, тогда вы также можете написать его как INNER JOIN. Кроме того, индекс покрытия (app_id, timestamp) может оказаться более эффективным, но нам действительно нужно увидеть EXPLAIN для измененного запроса. – Strawberry
Вы были правы - там, где все время вызывали проблему. Сочетание с вложенными выборками schadr позволило мне присоединиться к ним и иметь отдельные сегменты данных :) – Nick
Я не думаю, что решение shadr будет более эффективным, чем индекс покрытия, но я могу ошибаться – Strawberry