请问如何优化表的数据输出速度
之前发了一个索引优化的帖子,但是经过测试发现,问题并不是主要归咎于索引
http://bbs.csdn.net/topics/390573285
目前我建立的表sql 如下,请问该如何优化输出速度
硬件无法改变,所以只能从设置上寻求答案
假设已经包含所有所需索引,以及每次都会先进行索引重组或优化,关于每个列的长度,因为涉及到源头表的长度设定,所以无法进行缩减
CREATE TABLE [dbo].[FactChangeRequest](
[ChangeRequestID] [int] IDENTITY(1,1) NOT NULL,
[MappingSchemaID] [int] NOT NULL,
[AffectedProgramTagID] [int] NOT NULL,
[BaseStatusID] [int] NOT NULL,
[CustomerSeverityID] [int] NOT NULL,
[ProbOfCustomerOccurrenceID] [int] NOT NULL,
[EngineeringPriorityID] [int] NOT NULL,
[ProductLifeCycleID] [int] NOT NULL,
[ProjectID] [int] NOT NULL,
[ProductID] [int] NOT NULL,
[TypeID] [int] NOT NULL,
[DispositionClassificationID] [int] NOT NULL,
[BlockerID] [int] NOT NULL,
[SeverityID] [int] NOT NULL,
[SourceSystemID] [int] NOT NULL,
[SourceIssueID] [nvarchar](100) NOT NULL,
[CustomerEncountered] [char](1) NOT NULL,
[CustomerEscalated] [char](1) NOT NULL,
[ForecastOfCustBaseEncountering] [char](1) NOT NULL,
[SubmitDate] [datetime] NULL,
[TerminalStateDate] [datetime] NULL,
[LastUpdateTime] [datetime] NULL,
[CreateBy] [int] NOT NULL,
[CreateDate] [datetime] NOT NULL,
[UpdateBy] [int] NOT NULL,
[UpdateDate] [datetime] NOT NULL,
[Status] [char](1) NOT NULL,
CONSTRAINT [PK_FactChangeRequest_ChangeRequestID] PRIMARY KEY CLUSTERED
(
[ChangeRequestID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] 数据输出 优化
[解决办法]
你尝试:
建立一个相同有表FactChangeRequest2,它与原表FactChangeRequest结构完全一样,你把原表的数据插入到FactChangeRequest2,然后建索引,用同样的方法查询,看看速度快一点?如果比原来快,则你可以删除原表,然后把FactChangeRequest2表名改为FactChangeRequest,继续使用
------解决方案--------------------
--#1.根据下面4步,测试你的时间,是花费在SQL执行?SQL SERVER数据输出(包括网络)?ADO或OLEDB接口执行?还是前台数据绑定并显示?
--#2.如果#1和#2的测试相差非常大,SORRY,除了提高网络带宽,貌似没有什么好方法了。
--创建一个表TEST,存储语句执行时间
CREATE TABLE test(exec_time INT)
--#1.用MSSM执行,看一下从提交查询到数据显示到MSSM中结果的时间
DECLARE @begin DATETIME
SET @begin = GETDATE()
SELECT * FROM master..spt_values
INSERT INTO test(exec_time)
SELECT DATEDIFF(millisecond, @begin, GETDATE())
SELECT * FROM test
--#2.工具栏-》查询选项(显示估计的执行计划右边那个图标)-》结果-》网络-》勾选“执行后放弃结果”,进行和#1同样的测试
DECLARE @begin DATETIME
SET @begin = GETDATE()
SELECT * FROM master..spt_values
INSERT INTO test(exec_time)
SELECT DATEDIFF(millisecond, @begin, GETDATE())
SELECT * FROM test--打开另一个连接查看TEST中的结果
/*
exec_time
123
6
*/
--#3.调试你的前台代码,测试从提交SQL到返回到前端的时间用了多少。
--#4.测试数据从返回,再到完全展现到界面上用了多长时间。