Пространственное индексирование в SQL Server
Я пытаюсь перейти с postgres на sql-сервер (windows). Но я понятия не имею о синтаксисе ms-sql, и документация мне тоже не поможет. У меня есть таблица 'геокодов', хранящая данные о широте и долготе в десятичном формате. И у меня есть миграция для индексации длинных данных с использованием postgis
create index index_on_geocodes_location ON geocodes using gist (st_geographyfromtext(((('POINT('::text || longitude) || ' '::text) || latitude) || ')'::text))
У меня возникают трудности при создании эквивалентного запроса для sql-сервера. Согласно документам, довольно просто, если тип данных столбца является географическим, но, поскольку у меня уже есть база данных с десятичным типом данных, это не поможет.
PS: я использую рельсы миграции для выполнения запросов
1 ответ
Предполагая, что ваш вариант использования выполняет пространственные запросы, в противном случае нет смысла создавать пространственный индекс. Пространственный индекс в SQL Server может быть создан поверх столбца пространственного типа данных - геометрия (плоская) или география (изогнутая). Вы можете создать постоянный вычисляемый столбец и создать для него индекс, что-то вроде этого (предполагая тип географических данных и SRID 4326):
create table Geocodes(
id int identity primary key,
long decimal,
lat decimal,
point as geography::Point(long, lat, 4326) persisted
)
create spatial index SPIX_Geocodes_Point on Geocodes(point) using geography_auto_grid