Счетчик SQL для запроса JOIN выполняется вечно? - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь выполнить запрос количества при соединении 2 таблиц. В таблице e_amazing_client содержится миллион записей / строк, а в m_user всего 50 строк, НО запрос количества выполняется вечно!

SELECT COUNT(`e`.`id`) AS `count` 
FROM `e_amazing_client` AS `e` 
LEFT JOIN `user` AS `u` ON `e`.`cx_hc_user_id` = `u`.`id` 
WHERE ((`e`.`date_created` >= '2018-11-11') AND (`e`.`date_created` >= '2018-11-18')) AND (`e`.`id` >= 1)

Я не знаю, что не так с этим запросом? Любая помощь будет высоко оценена.

Ответы [ 3 ]

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

Может быть, вы хотели это:

SELECT COUNT(`e`.`id`) AS `count` 
FROM `e_amazing_client` AS `e` 
LEFT JOIN `user` AS `u` ON `e`.`cx_hc_user_id` = `u`.`id` 
WHERE ((`e`.`date_created` >= '2018-11-11') AND (`e`.`date_created` <= '2018-11-18')) AND (`e`.`id` >= 1)

проверять между датами?
Кроме того, вам действительно нужно

AND (`e`.`id` >= 1)

Если id это то, что идентификатор обычно в таблице, есть ли случай, чтобы быть <1?

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

Ваш запрос извлекает ВСЕ записи в / после 2018-11-11, потому что ваше предложение WHERE - ID> = 1. У вас нет предложения для конкретного пользователя.Вы также имели в исходном запросе на основе даты> = 2018-11-18.Вы МОЖЕТЕ означать, что вам нужен только подсчет В течение недели с 11/11 по 11/18, где знак ДОЛЖЕН быть> = 11-11 и <= 11-18. </p>

Что касается подсчета, выполучение ВСЕХ людей (при условии, что ни одна запись не имеет идентификатора меньше 1) и, следовательно, счет в этом диапазоне дат.Если вы хотите, чтобы это указывалось для каждого пользователя, как вы указали, вам нужно сгруппировать по столбцу cx_hc_user_id (user), чтобы увидеть, у кого их больше, или включить пользовательскую часть предложения WHERE, чтобы получить одного человека.

SELECT 
      e.cx_hc_user_id,
      count(*) countPerUser
   from
      e_amazing_client e
   WHERE 
          e.date_created >= '2018-11-11'
      AND e.date_created <= '2018-11-18'
   group by
      e.cx_hc_user_id

Вы можете заказать по убыванию количества, чтобы получить пользователя с наибольшим количеством, но все же не положительно, что вы спрашиваете.

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

Во-первых, я предполагаю, что этого достаточно:

SELECT COUNT(*) AS `count` 
FROM e_amazing_client e
WHERE e.date_created >= '2018-11-11' AND e.id >= 1;

Если user имеет только 50 строк, я сомневаюсь, что он создает дубликаты. Сравнения на date_created являются избыточными.

Для этого запроса попробуйте создать индекс для e_amazing_client(date_created, id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...