2012-02-27 4 views
1

Я делаю UPDATE запрос от моего клиентского приложения к базе данных (SQL Server 2008 R2) и занимает 6 секунд.Операция UPDATE занимает 6 секунд

В настоящее время у меня около 5 миллионов строк в этой таблице.

Вот запрос:

UPDATE MyTable 
SET subject2 = 'information abx', dateProcessed = '2012-02-27 23:02:44' 
WHERE id = 3712028; 

Где столбцы:

[id] [int] IDENTITY(1,1) NOT NULL, 
[dateProcessed] [datetime] NULL, 
[subject2] [nvarchar](150) NULL, 

Любые способы дефрагментации базы данных что-то подобное ?? :)

Я не думаю, что 6 секунд нормальное время для обновления 1 строку поиска по индексированной поле ...

Любая помощь высоко ценится! Спасибо,

ОБНОВЛЕНИЕ 1: Извините, ребята! У меня нет индексов в таблице. Я думал, что ИДЕНТИФИКАЦИЯ - это что-то вроде INDEX. Поэтому, вероятно, я должен добавить INDEX в поле id или сделать его ПЕРВИЧНЫЙ КЛЮЧ

+1

Какие определения индексов? –

+1

У вас есть какие-либо индексы или триггеры? –

+0

Вы просмотрели опцию Включить фактический вариант выполнения в SSMS? Это должно дать вам представление о том, почему ваш запрос настолько медленный. – starskythehutch

ответ

3

Объявление столбца identity не делает его автоматически индексированным; объявив ему первичный ключ делает:

[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY 

Вы можете добавить ограничение к существующей базе данных, как это:

ALTER TABLE MyTable ADD PRIMARY KEY (id) 
+0

Я думаю, что шансы сильны, что это проблема. Я не вижу обновления индекса как медленного. – ChaosPandion

+0

@ChaosPandion Я согласен, постоянно проводя шесть секунд на однострочном обновлении, является верным признаком полноэкранного сканирования. – dasblinkenlight

1

Если у вас есть индекс, определенный на subject2 или dateProcessed столбцы, то ваше обновление может быть медленным из-за обновления индексов.

Если вы это сделаете, возможно, стоит сбросить их, если вы часто не запрашиваете эти поля.

Также стоит сделать поле ID основным ключом, если это возможно, что даст ему индекс и ускорит поиск.