Point data type에 대한 Microsoft SQL Server 2008 R2 설명서를 볼 때 위도와 경도가 부동으로 제공 될 것으로 예상됩니다.지리 정보 데이터 유형은 경도와 위도가 부동로 필요하지만 제안 된 데이터 유형은 10 진수입니다. 누가 옳은가?
그러나, this post on SO suggests that the better data type for storing long and lat is decimal(9,6).
그래서 Microsoft는 왜 수레를 사용합니까?
업데이트 : 다음 예제에서는 위치를 위도/경도 나는 점에 부동 소수점 데이터 유형과 일치, 또는 소수를 유지해야, 성능을 향상시키기 위해 비정규입니까?
는CREATE TABLE [dbo].[GeoTest](
[Id] [INT] IDENTITY(1,1) NOT NULL,
[Lat] [decimal](9, 6) NOT NULL,
[Long] [decimal](9, 6) NOT NULL,
[GeoPoint] [GEOGRAPHY] NOT NULL,
CONSTRAINT [PK_GeoTest] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
스키마는 위의이 날 수 있습니다 : 이것보다 오히려
SELECT Lat, Long FROM GeoTest WHERE GeoPoint.STDistance(GEOGRAPHY::Point(47.6475, -122.1393, 4326))/1609.344 <= 20
: 느린
SELECT GeoPoint.Lat, GeoPoint.Long FROM GeoTest WHERE GeoPoint.STDistance(GEOGRAPHY::Point(47.6475, -122.1393, 4326))/1609.344 <= 20
. 두 데이터 유형이 다르다는 것이 놀랍습니다.
중요한 소수 자릿수를 정확하게 결정할 수 있습니까? 예를 들어 둘 중 하나가 잘못된 결정이 될 수 있습니까? –
지형 데이터 유형을 사용하고 있지 않다면 Point 데이터 유형을 질문과 혼동스럽게 생각합니다. 지형 데이터 유형을 사용하지 않는 경우 "일반"데이터 유형을 위도/경도에 사용해야합니다. 이것들은 완전히 다른 두 가지입니다. 그래서 그것들을 비교하는 것은 의미가 없습니다. – Pondlife
@ Pondlife 나는 이것이 내 다른 질문과 함께 좀 더 의미가 있다고 생각한다 : http://stackoverflow.com/questions/9723533/is-it-wise-to-denormalize-latitude-and-longitude-to-make- a-geospatial-query-fast – Junto