Всем привет, есть таблицы:
Bank 4900 строк
Branch 89000 строк
City 29000 строк
State 51 строка
Есть запрос, вкратце смысл такой:
Выбрать отделения для банка с URL slug, отсортировать по названию города, названию отделения, оставить первые 50 штук.
Делается для пагинации, так как для данного конкретного банка существует 5000 отделений, и вывалить их все на страницу не хочется.
Сам код запроса:
SELECT c.id, c.name, c.slug, s.id, s.name, s.slug, b.id, b.name, b.slug, b.location
FROM city c
INNER JOIN state s ON s.id = c.state_id
INNER JOIN branch b ON b.city_id = c.id
INNER JOIN bank bs ON b.bank_id = bs.id
WHERE bs.slug = 'some-bank'
ORDER BY c.name, b.name
LIMIT 50
Его EXPLAIN:
"id" "select_type" "table" "partitions" "type" "possible_keys" "key" "key_len" "ref" "rows" "filtered" "Extra"
"1" "SIMPLE" "bs" \t "ref" "PRIMARY,slug" "slug" "767" "const" "1" "100,00" "Using index; Using temporary; Using filesort"
"1" "SIMPLE" "b" \t "ref" "location_bank_fk_idx,location_city_fk_idx" "location_bank_fk_idx" "4" "banks.bs.id" "17" "100,00" \t
"1" "SIMPLE" "c" \t "eq_ref" "PRIMARY,city_state_fk" "PRIMARY" "8" "banks.b.city_id" "1" "100,00" \t
"1" "SIMPLE" "s" \t "eq_ref" "PRIMARY" "PRIMARY" "4" "banks.c.state_id" "1" "100,00" \t
Сам запрос выполняется около 0.3 секунды, что для сайта многовато.
Помогите понять, почему этот запрос выполняется медленно, и как его можно ускорить.