2016-05-18 6 views
1

У меня относительно большая таблица (в настоящее время 3 миллиона записей). Который имеет столбцы:Как улучшить производительность относительно большой таблицы

[id] INT IDENTITY(1,1) NOT NULL, 
[runId] INT NOT NULL, 
[request] VARCHAR(MAX) NULL, 
[response] VARCHAR(MAX) NULL 

и индекс, как: CONSTRAINT [Id_Indexed] PRIMARY KEY CLUSTERED

У меня есть вид на эту таблицу.

когда я запроса как:

Query 1 on table -- SELECT COUNT(*) FROM API (nolock) WHERE runId = 22 

Query 2 on view -- SELECT COUNT(*) FROM API_View WHERE runId = 22 

Тогда я получить результат около 1 миллиона, но время, затраченное на запрос 1 занял 16 минут, пока запрос 2 занял 18 минут.

Возможно ли улучшить это?

+7

Добавить индекс на столбец runId, и вы будете счастливы –

+3

3 миллиона МАЛЕНЬКИЙ, не большой. Не относительно большой. – TomTom

ответ

2

Как люди уже упоминалось использование добавить индекс к идентификатору колонки выполнения.

В зависимости от того, как используется таблица, вы можете подумать об использовании «with (nolock)» - подсказки. В некоторых случаях это может улучшить производительность. Читайте здесь для получения дополнительной информации:

https://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/

Еще советую (но не в отношении вашей проблемы производительности): Проверьте, действительно ли вам нужно VARCHAR (макс), часто VARCHAR (255) будет соответствовать лучше. varchar (max) использует больше места на вашем диске.

0
CREATE VIEW dbo.API_View 
WITH SCHEMABINDING 
AS 
    SELECT runId, cnt = COUNT_BIG(*) 
    FROM dbo.API 
    GROUP BY runId 
GO 

CREATE CLUSTERED INDEX ix ON dbo.API_View (runId) 
GO 

SELECT cnt 
FROM dbo.API_View WITH(NOEXPAND) 
WHERE runId = 22 

или

CREATE NONCLUSTERED INDEX ix ON dbo.API (runId) 
GO 

SELECT COUNT_BIG(*) 
FROM API --WITH(INDEX(ix)) 
WHERE runId = 22 

или

EXEC sp_tableoption 'dbo.API', 'large value types out of row', 1; 
0

нормально,

CREATE NONCLUSTERED INDEX [IX_Table_RunId] ON [Table]([RunId]); 

и снова запускать запросы.