Hej, posiadam tabelę o następującej strukturze:

CREATE TABLE `my_table` (
  `id` int NOT NULL AUTO_INCREMENT,
  `shape` geometry NOT NULL,
  `bounds` geometry NOT NULL, -- Polygon o czterech wierzchołkach
  PRIMARY KEY (`id`),
  SPATIAL KEY `bounds_idx` (`bounds`)
) ENGINE=InnoDB AUTO_INCREMENT=13748 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Tabela ma około 14 tys. wierszy i zawiera informacje o pewnych geometriach. Szukam sposobu na optymalizację zapytania znajdującego wszystkie geometrie w tabeli, których obwiednia (kolumna bounds) przecina się z kołem o zdefiniowanym promieniu R (wyrażonym w m) i środku w pewnym punkcie referencyjnym P (latitude, longitude).
Na ten moment moje zapytanie wygląda następująco (dzielenie przez 111194.927 wynika z konwersji na współrzędne geograficzne):

SELECT ST_Intersects(ST_Buffer(P, R / 111194.927), bounds) AS i from my_table

Dla przykładowych danych:

P = ST_GeomFromText('POINT(53 21)')
R = 30000

zapytanie wygląda następująco:

SELECT ST_Intersects(ST_Buffer(ST_GeomFromText('POINT(53 21)'), 30000 / 111194.927), bounds) AS i from my_table

Powyższe zapytanie nie zajmuje więcej niż ~3ms, natomiast poniższe zapytanie, gdzie wybierane są tylko geometrie których obwiednie przecinają się ze wspomnianym kołem (i = 1), wykonuje się średnio ~70ms. Czasy są tym większe im mniej obwiedni przecina się z kołem.

SELECT ST_Intersects(ST_Buffer(ST_GeomFromText('POINT(53 21)'), 30000 / 111194.927), bounds) AS i from my_table HAVING i = 1

Zdaję sobie sprawę, że czasy 70ms wydają się być w pełni akceptowalne, jednak ze względu na to że wszystkie punkty znalezionych geometrii są później dodatkowo przetwarzane (PHP) to zależy mi na każdej milisekundzie.
Czy podane przeze mnie zapytanie może być w jakikolwiek sposób zoptymalizowane?