У меня странная проблема в Microsoft SQL Server 2008.
У меня есть большая база данных (20 ГБ) с 10 таблицами, и я пытаюсь показать, как правильно создавать индексы.
Вот моя проблема: по некоторым вложенным запросам я получаю более быстрые результаты без с использованием индексов! Это близко (одна или две секунды), но в некоторых случаях использование вообще никаких индексов, кажется, заставляет эти запросы работать быстрее ... Я запускаю Checkpoiunt и DBCC dropcleanbuffers для сброса кэшей перед запуском сценариев, поэтому я ' м вроде как потерялся.
Что может быть причиной этого?
Я точно знаю, что индексы плохо построены (подумайте, по одному индексу на релевантное поле), весь смысл в том, чтобы доказать важность их правильного построения, но это не должно быть медленнее, чем отсутствие индексов в все, верно?
РЕДАКТИРОВАТЬ: вот один из виновных запросов:
SET STATISTICS TIME ON
SET STATISTICS IO ON
USE DBX;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
DBCC FREEPROCCACHE;
GO
SELECT * FROM Identifier where CarId in (SELECT CarID from Car where ManufactId = 14) and DataTypeId = 1
Таблица идентификаторов:
- IdentifierId int не нуль
- CarId int not null
- DataTypeId int не равен NULL
- Alias nvarchar (300)
Автомобильный стол:
- CarId int not null
- ManufactId int не нуль
- (после нескольких полей, все nvarchar (100)
Каждая из этих маркированных точек имеет индекс вместе с некоторыми индексами, которые одновременно хранят две из них одновременно (например, CarId и DataTypeId).
Наконец, таблица идентификаторов содержит более миллиона записей, а таблица Car - два или три миллиона