У меня следующая структура базы данных
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))"
}
}
]
}
}