Я получаю эту ошибку:
3674 The spatial index on column 'position' will not be used by the
query optimizer since the column does not have an SRID attribute.
Consider adding an SRID attribute to the column.
Итак, прочитав эту статью: https://mysqlserverteam.com/geographic-indexes-in-innodb/, я решил добавить SRID в столбец, я также пытался прочитать документацию, но Я до сих пор не понимаю, что это такое. Поэтому я делаю так, как написано в тексте, и добавляю это так:
DROP DATABASE IF EXISTS `gis`;
CREATE DATABASE IF NOT EXISTS `gis`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `gis`;
DROP TABLE IF EXISTS user;
CREATE TABLE IF NOT EXISTS user (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(48) NOT NULL,
gender ENUM('male', 'female') NOT NULL,
age TINYINT UNSIGNED NOT NULL,
position POINT NOT NULL SRID 4326
);
ALTER TABLE user ADD SPATIAL INDEX(position);
И затем я пытаюсь добавить несколько строк:
INSERT INTO user (firstname, gender, age, position) VALUES ('Alexander', 'male', 34, POINT(63.429909, 10.393035));
INSERT INTO user (firstname, gender, age, position) VALUES ('Dina', 'female', 21, POINT(63.426300, 10.392481));
INSERT INTO user (firstname, gender, age, position) VALUES ('Martin', 'male', 32, POINT(63.422304, 10.432027));
INSERT INTO user (firstname, gender, age, position) VALUES ('Tina', 'female', 19, POINT(63.430603, 10.373038));
INSERT INTO user (firstname, gender, age, position) VALUES ('Kristin', 'female', 20, POINT(63.434858, 10.411359));
INSERT INTO user (firstname, gender, age, position) VALUES ('Mette', 'female', 33, POINT(63.420422, 10.403811));
INSERT INTO user (firstname, gender, age, position) VALUES ('Andres', 'male', 34, POINT(63.419488, 10.395722));
INSERT INTO user (firstname, gender, age, position) VALUES ('Sandra', 'female', 25, POINT(63.432053, 10.408738));
INSERT INTO user (firstname, gender, age, position) VALUES ('Kine', 'female', 29, POINT(63.432302, 10.412643));
INSERT INTO user (firstname, gender, age, position) VALUES ('Henrik', 'male', 25, POINT(63.421055, 10.443288));
Но я получаю ошибку:
Error Code: 3643. The SRID of the geometry does not match the SRID of the column 'position'.
The SRID of the geometry is 0, but the SRID of the column is 4326.
Consider changing the SRID of the geometry or the SRID property of the column.
Если я удалю SRID, тогда индекс не будет работать, когда я выполняю запрос, подобный этому, с EXPLAIN:
SET @distance = 3.5;
SET @my_place_lng = 63.431592;
SET @my_place_lat = 10.396210;
EXPLAIN SELECT
id,
firstname,
gender,
age,
ST_Distance_Sphere(Point(@my_place_lng, @my_place_lat), position) AS distance_from_me
FROM user
WHERE
ST_Contains(ST_MakeEnvelope(
Point((@my_place_lng+(@distance/111)), (@my_place_lat+(@distance/111))),
Point((@my_place_lng-(@distance/111)), (@my_place_lat-(@distance/111)))
), position)
ORDER BY distance_from_me ASC;
Что я могу сделать? Я даже не знаю, где читать, чтобы понять больше, не видел примеров, которые я понимаю.