Оптимизация запросов mysqlSQL с помощью условия Clause - PullRequest
0 голосов
/ 28 сентября 2019

У меня следующая структура базы данных

transactions
  transactionid
  transaction date

с 9083281 строками

entity
  crmid
  ownerid

с 39083281 строками

и таблицей пользователей

   id
   username

с 136 строками

Теперь я хочу найти все транзакции, которые принадлежат пользователю с данным идентификатором

, поэтому написал запрос

select * from transactions 
inner join entity on crmid = transactionid 
left join users on entity.ownerid = users.id 
where users.id = 1;

этот запрос занимает около 46 секундвыполнить, что можно сделать для его оптимизации

Обратите внимание, что crmid, транзакция, id являются первичными ключами

Обновить результат запроса объяснения

{
  "query_block": {
    "select_id": 1,
    "nested_loop": [
      {
        "table": {
          "table_name": "users",
          "access_type": "const",
          "possible_keys": [
            "PRIMARY"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "id"
          ],
          "key_length": "4",
          "ref": [
            "const"
          ],
          "rows": 1,
          "filtered": 100,
          "using_index": true
        }
      },
      {
        "table": {
          "table_name": "transactions",
          "access_type": "index",
          "possible_keys": [
            "PRIMARY"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "transactionid",
          ],
          "key_length": "166",
          "rows": 9083281,
          "filtered": 100,
          "using_index": true
        }
      },
     
      {
        "table": {
          "table_name": "crmentity",
          "access_type": "eq_ref",
          "possible_keys": [
            "PRIMARY",
            "deleted_idx",
            "owner"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "crmid"
          ],
          "key_length": "4",
          "ref": [
            "transactions.transactionsid"
          ],
          "rows": 1,
          "filtered": 100,
          "attached_condition": "((`crmentity`.`smownerid` = 1))"
        }
      }
    ]
  }
}
...