select count(*) from record where date > '19991201' and date < '19991214' and amount > 2000 --(25秒)
select date,sum(amount) from record group by date --(55秒)
select count(*) from record where date > '19990901' and place in ('BJ','SH') --(27秒)
select count(*) from record where date > '19991201' and date < '19991214' and amount > 2000 --(14秒)
select date,sum(amount) from record group by date --(28秒)
select count(*) from record where date > '19990901' and place in ('BJ','SH') --(14秒)
select count(*) from record where date > '19991201' and date < '19991214' and amount > 2000 --(26秒)
select date,sum(amount) from record group by date --(27秒)
select count(*) from record where date > '19990901' and place in ('BJ', 'SH') --(< 1秒)
select count(*) from record where date > '19991201' and date < '19991214' and amount > 2000 --(< 1秒)
select date,sum(amount) from record group by date --(11秒)
select count(*) from record where date > '19990901' and place in ('BJ','SH') --(< 1秒)
select * from record where substring(card_no,1,4)='5378' --(13秒)
select * from record where amount/30< 1000 --(11秒)
select * from record where convert(char(10),date,112)='19991201' --(10秒)
select * from record where card_no like '5378%' --(< 1秒)
select * from record where amount < 1000*30 --(< 1秒)
select * from record where date= '1999/12/01' --(< 1秒)
create proc count_stuff as
declare @a int
declare @b int
declare @c int
declare @d char(10)
begin
select @a=count(*) from stuff where id_no='0'
select @b=count(*) from stuff where id_no='1'
end
select @c=@a+@b
select @d=convert(char(10),@c)
print @d
Select cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
Where cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
AND cust.postcode>'98000'
orDER BY cust.name
Select cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
Where cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
orDER BY cust.name
INTO TEMP cust_with_balance
然后以下面的方式在临时表中查询:
Select * FROM cust_with_balance where postcode>'98000'
9.优化服务器: 使用内存配置选项优化服务器性能
Microsoft® SQL Server™ 2000 的内存管理组件消除了对 SQL Server 可用的内存进行手工管理的需要。SQL Server 在启动时根据操作系统和其它应用程序当前正在使用的内存量,动态确定应分配的内存量。当计算机和SQL Server 上的负荷更改时,分配的内存也随之更改。有关更多信息,请参见内存构架。下列服务器配置选项可用于配置内存使用并影响服务器性能:
min server memory
max server memory
max worker threads
index create memory min memory per query
min server memory 服务器配置选项可用于确保 SQL Server 在达到该值后不会释放内存。可以基于 SQL Server 的大小及活动将该配置选项设置为特定的值。如果选择设置此选项,必须为操作系统和其他程序留出足够的内存。如果操作系统没有足够的内存,会向 SQL Server 请求内存,从而导致影响 SQL Server 性能。 max server memory 服务器配置选项可用于:在 SQL Server 启动及运行时,指定 SQL Server 可以分配的最大内存量。如果知道有多个应用程序与 SQL Server 同时运行,而且想保障这些应用程序有足够的内存运行,可以将该配置选项设置为特定的值。如果这些其它应用程序(如 Web 服务器或电子邮件服务器)只根据需要请求内存,则 SQL Server 将根据需要给它们释放内存,因此不要设置 max server memory 服务器配置选项。然而,应用程序通常在启动时不假选择地使用可用内存,而如果需要更多内存也不请求。如果有这种行为方式的应用程序与 SQL Server 同时运行在相同的计算机上,则将 max server memory 服务器配置选项设置为特定的值,以保障应用程序所需的内存不由 SQL Server 分配出。
不要将 min server memory 和 max server memory 服务器配置选项设置为相同的值,这样做会使分配给 SQL Server 的内存量固定。动态内存分配可以随时间提供最佳的总体性能。有关更多信息,请参见服务器内存选项。 max worker threads 服务器配置选项可用于指定为用户连接到 SQL Server 提供支持的线程数。255 这一默认设置对一些配置可能稍微偏高,这要具体取决于并发用户数。由于每个工作线程都已分配,因此即使线程没有正在使用(因为并发连接比分配的工作线程少),可由其它操作(如高速缓冲存储器)更好地利用的内存资源也可能是未使用的。一般情况下,应将该配置值设置为并发连接数,但不能超过 32727。并发连接与用户登录连接不同。SQL Server 实例的工作线程池只需要足够大,以便为同时正在该实例中执行批处理的用户连接提供服务。如果增加工作线程的数量超过默认值,会降低服务器性能。有关更多信息,请参见max worker threads 选项。
说明当 SQL Server 运行在 Microsoft Windows® 98 上时,最大工作线程服务器配置选项不起作用。 index create memory 服务器配置选项控制创建索引时排序操作所使用的内存量。在生产系统上创建索引通常是不常执行的任务,通常调度为在非峰值时间执行的作业。因此,不常创建索引且在非峰值时间时,增加该值可提高索引创建的性能。不过,最好将 min memory per query 配置选项保持在一个较低的值,这样即使所有请求的内存都不可用,索引创建作业仍能开始。有关更多信息,请参见 index create memory 选项。
min memory per query 服务器配置选项可用于指定分配给查询执行的最小内存量。当系统内有许多查询并发执行时,增大 min memory per query 的值有助于提高消耗大量内存的查询(如大型排序和哈希操作)的性能。不过,不要将 min memory per query 服务器配置选项设置得太高,尤其是在很忙的系统上,因为查询将不得不等到能确保占有请求的最小内存、或等到超过 query wait 服务器配置选项内所指定的值。如果可用内存比执行查询所需的指定最小内存多,则只要查询能对多出的内存加以有效的利用,就可以使用多出的内存。有关更多信息,请参见 min memory per query 选项和 query wait 选项。使用 I/O 配置选项优化服务器性能
下列服务器配置选项可用于配置 I/O 的使用并影响服务器性能: recovery interval
recovery interval 服务器配置选项控制 Microsoft® SQL Server™ 2000 在每个数据库内发出检查点的时间。默认情况下,SQL Server 确定执行检查点操作的最佳时间。然而,若要确定这是否为适当的设置,需要使用 Windows NT 性能监视器监视数据库文件上的磁盘写入活动。导致磁盘利用率达到 100% 的活动尖峰值会妨害性能。若更改该参数以使检查点进程较少出现,通常可以提高这种情况下的总体性能。但仍须继续监视性能以确定新值是否已对性能产生正面影响。有关更多信息,请参见recovery interval 选项。