Если вам нужно сохранить предикаты, например
S_D.postcode = 'Liverpool' OR S.company LIKE 'Liverpool' OR S.town LIKE 'Liverpool'
, тогда рассмотрите возможность добавления индексов в те же столбцы.Итак:
ALTER TABLE shop_delivery_area ADD KEY `sda_idx1` (`postcode`);
ALTER TABLE shop ADD KEY `shop_idx1` (`company`);
ALTER TABLE shop ADD KEY `shop_idx2` (`town`);
Еще один момент касается нечеткого поиска.Если вы можете заменить «LIKE» на «=», то вы увидите увеличение скорости.Хотя нет смысла использовать «LIKE» без нечеткого поиска, например, «LIKE», «Ливерпуль».Используйте LIKE "% Liverpool%" или = "Liverpool".Так что либо используйте:
S_D.postcode = 'Liverpool' OR S.company LIKE '%Liverpool%' OR S.town LIKE '%Liverpool%'
или
S_D.postcode = 'Liverpool' OR S.company = 'Liverpool' OR S.town = 'Liverpool'
Если вы используете последний и создаете индексы, тогда ваш запрос должен работать просто отлично!