MySQL медленное соединение на очень простой запрос, индексы, внешние ключи и все, кажется, в выравнивании - PullRequest
0 голосов
/ 05 июля 2018

У меня есть две схемы, обе идентичны, одна из которых содержит примерно в 5 раз меньше данных, а запросы медленнее в 120 раз с теми же индексами, внешними ключами, сервером базы данных и всем остальным, о чем я мог подумать проверять.

Вот два запроса:

-- Bigger Database, takes .5 seconds, has ~900k and 80 records

select *
  from schemaA.bb_quote
  inner join schemaA.scb_user
    ON scb_user.usr_uid = bb_quote.q_usr_uid
  order by q_quoteid desc
  limit 20;

-- smaller database, takes 2 minutes, has ~211k and 4 records

select *
  from schemaB.bb_quote
  inner join schemaB.scb_user
    ON scb_user.usr_uid = bb_quote.q_usr_uid
  order by q_quoteid desc
  limit 20;

Я выполнил следующие команды для объяснения, и объяснения разные.

explain select *
          from schemaA.bb_quote
          inner join schemaA.scb_user
            ON scb_user.usr_uid = bb_quote.q_usr_uid
          order by q_quoteid desc
          limit 20;

Quick Query

explain select *
          from schemaB.bb_quote
          inner join schemaB.scb_user
            ON scb_user.usr_uid = bb_quote.q_usr_uid
          order by q_quoteid desc
          limit 20;

enter image description here

Второй заканчивается совсем другим объяснением. Я не уверен, какие дальнейшие шаги отладки предпринять.

Я много раз читал, что это результат того, что им не хватает оперативной памяти, и ему нужно создать файл для своей работы. Это выполняется в AWS RDS, и для мониторинга действительно используется свободное место на жестком диске ~ 20 гигабайт, затем он восстанавливает всю эту память, в то время как другой запрос этого не делает.

Как лучше всего определить, чем отличаются эти две схемы?

Отладка завершена

  • Удаляя и перестраивая схему с помощью mysqldump, проблема все еще возникает.
  • Удаление и повторное использование внешнего ключа
  • Тестирование ~ 12 других одинаковых схем

Дополнительная информация из комментариев

  • Версия = MySQL 5.5.46
  • q_quoteid находится в таблице bb_quote
  • EXPLAIN FORMAT = JSON SELECT не работает, я не думаю, что он поддерживается этой версией MySQL
...