首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教怎么优化表的数据输出速度

2013-09-06 
请问如何优化表的数据输出速度之前发了一个索引优化的帖子,但是经过测试发现,问题并不是主要归咎于索引htt

请问如何优化表的数据输出速度
之前发了一个索引优化的帖子,但是经过测试发现,问题并不是主要归咎于索引
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.测试数据从返回,再到完全展现到界面上用了多长时间。

[解决办法]
建议:
 1.避免使用"select *",会影响执行计划,尽量将仅需要的字段返回即可.
 2.不必每次查询都先进行索引重组或优化,一般一周一次即可.
 3.查看数据库属性,统计信息是否为自动创建及自动更新的,须开启.
 4.创建具有包含列的索引,即
    create index .. on [表名]([SubmitDate]) include([需返回的字段列表])
[解决办法]
楼主要说明下目前的瓶颈到底在哪里,是在数据库里面执行查询的时候都慢吗,还是在界面上显示数据比较慢。

热点排行