Доступ к данным из одной таблицы в SQL Server 2005 слишком медленный - PullRequest
0 голосов
/ 14 июня 2010

Ниже приведен скрипт таблицы. Доступ к данным из этой таблицы слишком медленный.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Emails](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [datecreated] [datetime] NULL CONSTRAINT [DF_Emails_datecreated]  
        DEFAULT (getdate()),
    [UID] [nvarchar](250) COLLATE Latin1_General_CI_AS NULL,
    [From] [nvarchar](100) COLLATE Latin1_General_CI_AS NULL,
    [To] [nvarchar](100) COLLATE Latin1_General_CI_AS NULL,
    [Subject] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
    [Body] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
    [HTML] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
    [AttachmentCount] [int] NULL,
    [Dated] [datetime] NULL
) ON [PRIMARY]

Следующий запрос занимает 50 секунд для извлечения данных.

select id, datecreated, UID, [From], [To], Subject, AttachmentCount, 
    Dated from emails

Если я включу Тело и HTML в выборку, то время будет хуже.

индексы включены:

  • идентификатор уникального кластера
  • Из Не уникальных не кластеризованных
  • Для не уникальных не кластеризованных

В настоящее время в Tabls имеется 180000+ записей.

Может быть 100 000 записей в месяц, поэтому с течением времени это замедлится.

Решит ли проблема разделение данных на две таблицы? Какие еще индексы должны быть там?

1 Ответ

1 голос
/ 14 июня 2010

Это почти наверняка объем данных, который вызывает проблему.Из-за этого вам не следует извлекать столбец Subject, пока он вам не понадобится.Даже извлечение SUBSTRING(Subject, 100) может быть заметно быстрее.

Это может быть неуместно, но более старые версии SQL Server пострадали, если бы столбцы BLOB не были последними в строке, поэтому я просто перенесу эксперимент[AttachmentCount] и [Dated] над тремя nvarchar(max) столбцами.

...