Простой запрос с левым соединением вызывает тайм-аут кластера ndb, но отлично работает на innodb - PullRequest
0 голосов
/ 23 апреля 2020

Недавно я просто переместил свою базу данных в кластер ndb, и у меня есть база данных с примерно 200.000 записей

Я пытаюсь выполнить этот запрос, чтобы получить ежемесячный отчет, но всегда получаю тайм-аут запроса в кластере ndb, когда я пытаюсь запрос на InnoDB дает быстрый результат запроса <1 сек. этот запрос: </p>

 SELECT
    m.merchant_name,
    COUNT(CASE WHEN pay.payment_status = '00' THEN 1 ELSE NULL END) AS 'Success',
    SUM(CASE WHEN pay.payment_status = '00' THEN pay.transaction_amount ELSE 0 END) AS 'Total success',
    COUNT(CASE WHEN pay.payment_status != '00' THEN 1 ELSE NULL END) AS 'Fail',
    SUM(CASE WHEN pay.payment_status != '00' THEN pay.transaction_amount ELSE 0 END) AS 'Total Fail',
    COUNT(pay.trx_id) AS 'Total',
    SUM(pay.transaction_amount) AS 'Total Amount'
 FROM
   (
    SELECT
       mchn.merchant_name,
       mchl.channel_id
   FROM
      db_merchant mchn
   LEFT JOIN db_merchant_channel mchl ON
      mchl.merchant_id = mchn.merchant_id ) AS m
LEFT JOIN (
   SELECT
        x.trx_id,
        x.channel_id,
        fq.transaction_amount,
        fq.transaction_status,
        fs.payment_status
    FROM
       t_transaction x
    LEFT JOIN flag_request fq ON
       x.channel_id = fq.channel_id
       AND x.transaction_no = fq.transaction_no
    LEFT JOIN flag_response fs ON
       fs.freq_id = fq.freq_id

    WHERE
       LEFT(DATE(fs.created_at),7) = '2020-03' ) AS pay ON
   CONVERT(m.channel_id USING utf8) = CONVERT(pay.channel_id USING utf8)
GROUP BY
  m.channel_id

объяснить результат из кластера ndb explain result from ndb cluster

объяснить результат из innodb explain result from innodb

что возможно не так?

...