Mysql
 sql >> база данни >  >> RDS >> Mysql

Намиране на най-близките места с помощта на точков тип данни и st_distance_sphere в MySQL 8

може бъде най-доброто решение. Нека първо получим някои други отговори...

Какво означава EXPLAIN SELECT ... казвам? (Това може да отговори на вашия Q2).

Вашето запитване ще сканира цялата таблица, независимо от другите отговори. Може би искате LIMIT ... на края?

Друго нещо, което може да е полезно (в зависимост от приложението ви и от оптимизатора):Добавете ограничаваща кутия към WHERE клауза.

Във всеки случай, направете следното, за да получите точна представа за това колко реда всъщност са докоснати:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

Върнете се с тези отговори; тогава може би можем да повторим по-нататък.

След ПОКАЗВАНЕ НА СТАТУСА

Е, Handler_read_rnd_next казва, че е било пълно сканиране на таблицата. 1000 и 1001 -- имахте ли LIMIT 1000 ?

Заключавам, че LIMIT не се взема предвид в това как SPATIAL върши работа. Тоест, той прави опростеното нещо -- (1) проверка на всички редове, (2) сортиране, (3) LIMIT .

И така, какво да правя?

План А:Решете, че не искате резултати по-далеч от X мили (км) и добавете „ограничаваща кутия“ към заявката.

План Б:Изоставете Spatial и копайте по-сложен начин за изпълнение на задачата:http:// mysql.rjweb.org/doc.php/latlng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо дава на mysql грешката ER_TABLE_NOT_LOCKED, докато току-що заключих таблицата?

  2. PHP/MySQL Критичен раздел

  3. NodeJS сървър с mysql увисва

  4. Grails 3 - Gradle зависимости Mysql конектор

  5. Броят на колоната не съвпада с броя на стойностите на ред 1 VendorError:1136