Для выполнения следующего оператора sql требуется 5 минут. Я просто. Не надо. Получить. Это :( В первой таблице 6861534 строк. Вторая таблица имеет немного меньше .. и третья таблица (которая содержит 4 ГЕОГРАФИЧЕСКИХ ПОЛЯ) имеет то же самое, что и первая.
Те ГЕОГРАФИЧЕСКИЕ
поля в третьей таблице .. они не должны быть беспорядочными 'с оператором sql ... так ли? Может быть, это из-за того, что таблица настолько велика (из-за полей GEOGRAPHY
), что у нее огромные размеры страниц или что-то в этом роде… таким образом разрушается сканирование таблицы, которое выполняет COUNT?
SELECT COUNT(*)
FROM [dbo].[Locations] a
inner join [dbo].[MyUSALocations] b on a.LocationId = b.LocationId
inner join [dbo].[GeographyBoundaries] c on a.locationid = c.LocationId
По запросу , вот еще немного информации о таблице GeographyBoundaries ...
/****** Object: Index [PK_GeographyBoundaries] Script Date: 11/16/2010 12:42:36 ******/
ALTER TABLE [dbo].[GeographyBoundaries] ADD CONSTRAINT [PK_GeographyBoundaries] PRIMARY KEY CLUSTERED
(
[LocationId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
После добавления некластеризованного индекса он теперь упал до 4 секунд! Что здорово. Но почему ?
What Zee Frak?
Теперь, когда я просто выполняю ОДНО присоединение и принудительно выполняю ИНДЕКС ... он возвращается к 5 минутам. Я сделал это, чтобы
.
SELECT COUNT(*)
FROM [dbo].[Locations] a
INNER JOIN [dbo].[GeographyBoundaries] c
WITH (INDEX(PK_GeographyBoundaries)) ON a.locationid = c.LocationId