SQLServer语句优化

合集下载

sql server 语句优化题目

sql server 语句优化题目

题目:SQL Server 语句优化随着数据量的增加和数据库应用的复杂化,SQL Server 数据库在使用过程中可能会出现性能下降的情况,而对于性能下降的根本原因通常可以追溯到 SQL 语句的性能不佳。

对 SQL Server 数据库中的 SQL 语句进行优化显得尤为重要。

本文将从 SQL 语句的优化方法、常见优化技巧和注意事项等方面展开探讨。

一、SQL 语句优化的方法1. 了解执行计划在进行 SQL 语句优化时,首先需要了解 SQL 语句的执行计划。

执行计划是 SQL Server 生成的一份详细的指导书,用于指导 SQL Server 如何执行查询。

通过查看执行计划,可以清晰地了解 SQL 语句的执行过程,找到执行效率低下的地方并进行相应的优化。

2. 使用索引索引是提高 SQL 查询效率的重要手段之一。

在 SQL 查询过程中,如果涉及到大量的数据表,没有索引的情况下,数据库引擎将对整个数据表进行扫描,导致查询性能低下。

正确使用索引可以大大提高 SQL 查询的效率。

但是,过多的索引也可能会导致性能下降,因此需要根据实际情况进行合理的索引设计和使用。

3. 优化 SQL 语句在编写 SQL 语句时,应尽量避免使用 SELECT *,而是明确指定需要查询的字段,减少不必要的数据传输和计算。

尽量将复杂的逻辑操作放到数据库层面完成,减少数据传输和网络开销,提高查询效率。

二、常见的 SQL 语句优化技巧1. 避免在 WHERE 子句中使用函数在 SQL 查询中,如果在 WHERE 子句中使用了函数,数据库引擎会对每一条记录都进行函数的计算,导致查询性能低下。

应尽量避免在WHERE 子句中使用函数,可以通过其他方法来达到相同的查询效果。

2. 使用 UNION ALL 替代 UNION在 SQL 查询中,如果使用 UNION 进行多个查询结果的合并,数据库引擎会进行重复数据的去重操作,导致性能下降。

而使用 UNION ALL 则可以避免重复数据的去重操作,提高查询效率。

SQLServer性能调优之执行计划(ExecutionPlan)调优

SQLServer性能调优之执行计划(ExecutionPlan)调优

SQLServer性能调优之执⾏计划(ExecutionPlan)调优SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join。

Hash Join:⽤来处理没有排过序/没有索引的数据,它在内存中把 Join 两边数据(的关联key)分别建⽴⼀个哈希表。

例如有以下的查询语句,关联的两张表没有建⽴索引,执⾏计划将显⽰为Hash Join。

[sql]1. SELECT2. sh.*3. FROM4. SalesOrdHeaderDemo AS sh5. JOIN6. SalesOrdDetailDemo AS sd7. ON8. sh.SalesOrderID=sd.SalesOrderID9. GOMerge Join:⽤来处理有索引的数据,它⽐Hash Join轻量化。

我们为前⾯两张表的关联列建⽴索引,然后再次上⾯的查询,执⾏计划将变更为Merge Join[sql]1. CREATE UNIQUE CLUSTERED INDEX idx_salesorderheaderdemo_SalesOrderID ON SalesOrdHeaderDemo (SalesOrderID)2. GO3. CREATE UNIQUE CLUSTERED INDEX idx_SalesDetail_SalesOrderlID ON SalesOrdDetailDemo (SalesOrderID,SalesOrderDetailID)4. GONested Loop Join:在满⾜Merge Join的基础上,如果某⼀边的数据较少,那么SQL Server 会把数据较少的那个作为外部循环,另⼀个作为内部循环来完成Join处理。

继续前⾯的例⼦为查询语句加上WHERE语句来减少 Join ⼀边的数据量,执⾏计划显⽰为Nested Loop Join。

sqlsqerver语句优化方法

sqlsqerver语句优化方法

sqlsqerver语句优化方法SQL Server是一种关系型数据库管理系统,可以使用SQL语句对数据进行操作和管理。

优化SQL Server语句可以提高查询和操作数据的效率,使得系统更加高效稳定。

下面列举了10个优化SQL Server语句的方法:1. 使用索引:在查询频繁的列上创建索引,可以加快查询速度。

但是要注意不要过度索引,否则会影响插入和更新操作的性能。

2. 避免使用SELECT *:只选择需要的列,避免不必要的数据传输和处理,提高查询效率。

3. 使用JOIN替代子查询:在进行关联查询时,使用JOIN操作比子查询更高效。

尽量避免在WHERE子句中使用子查询。

4. 使用EXISTS替代IN:在查询中使用EXISTS操作比IN操作更高效。

因为EXISTS只需要找到一个匹配的行就停止了,而IN需要对所有的值进行匹配。

5. 使用UNION替代UNION ALL:如果对多个表进行合并查询时,如果不需要去重,则使用UNION ALL操作比UNION操作更高效。

6. 使用TRUNCATE TABLE替代DELETE:如果要删除表中的所有数据,使用TRUNCATE TABLE操作比DELETE操作更高效。

因为TRUNCATE TABLE不会像DELETE一样逐行删除,而是直接删除整个表的数据。

7. 使用分页查询:在需要分页显示查询结果时,使用OFFSET和FETCH NEXT操作代替传统的使用ROW_NUMBER进行分页查询。

这样可以减少查询的数据量,提高效率。

8. 避免使用CURSOR:使用游标(CURSOR)会增加数据库的负载,降低查询效率。

如果可能的话,应该尽量避免使用游标。

9. 使用参数化查询:使用参数化查询可以减少SQL注入的风险,同时也可以提高查询的效率。

因为参数化查询会对SQL语句进行预编译,可以复用执行计划。

10. 定期维护数据库:定期清理过期数据、重建索引、更新统计信息等维护操作可以提高数据库的性能。

sqlserver explain 使用方法

sqlserver explain 使用方法

SQL Server的Explain命令是一个非常有用的查询分析工具,它可以显示查询语句的执行计划,帮助开发者理解查询的执行过程,优化查询性能。

以下是如何使用Explain命令的详细步骤:
1. 打开SQL Server Management Studio(SSMS)
2. 在查询窗口中,输入你想要优化的SQL查询语句。

3. 右键点击查询窗口,选择"执行"或者按F5键,执行查询。

4. 在查询执行完毕后,右键点击查询结果,选择"查看执行计划",或者按Ctrl+L打开执行计划窗口。

5. 在执行计划窗口,你可以看到查询的各个阶段,包括查询的类型(如全表扫描、索引查找等),以及各个阶段的执行时间。

6. 如果你对查询的某个阶段不理解,可以点击该阶段,查看详细的执行计划。

7. 在查看执行计划时,你可以看到查询中涉及的表、索引、列等信息,以及查询的过滤条件。

8. 根据执行计划,你可以对查询语句进行优化,如调整索引、修改查询条件等。

sqlserver解决锁表的方法

sqlserver解决锁表的方法

sqlserver解决锁表的方法SQL Server是一种常用的关系型数据库管理系统,它能够处理大量的数据并提供高效的数据访问和管理功能。

然而,在使用SQL Server的过程中,我们有时会遇到锁表的情况。

锁表是指在一个事务中对某个表进行了修改操作后,其他事务无法对该表进行读取或修改操作,从而导致阻塞或死锁的问题。

为了解决锁表的问题,我们可以采取以下几种方法:1. 优化查询语句:锁表的一个常见原因是查询语句没有充分利用索引,导致扫描整个表或大量的数据行,从而增加了锁定资源的时间和数量。

通过优化查询语句,可以减少对表的访问次数和锁定资源的数量,从而提高并发性能。

可以通过添加合适的索引、优化where条件、避免使用不必要的join操作等方式来优化查询语句。

2. 设定合理的事务隔离级别:事务隔离级别决定了事务对数据的锁定范围和持续时间。

在SQL Server中,有四种事务隔离级别,分别是Read Uncommitted、Read Committed、Repeatable Read 和Serializable。

合理设置事务隔离级别可以减少锁表的概率,提高并发性能。

一般来说,使用Read Committed隔离级别比较合适,它能够避免脏读和不可重复读的问题,同时也能够减少锁表的情况。

3. 使用合适的锁定粒度:SQL Server提供了多种锁定粒度,包括表级锁、页级锁和行级锁。

选择合适的锁定粒度可以减少锁定资源的数量,从而提高并发性能。

一般来说,使用行级锁是最小的锁定粒度,可以最大程度地减少锁表的情况。

可以通过在查询语句中添加合适的锁定提示(例如使用WITH (NOLOCK))或者设置数据库的默认锁定级别来控制锁定粒度。

4. 使用事务和锁定提示:在一些情况下,我们可以通过使用事务和锁定提示来控制锁表的情况。

事务可以将多个操作作为一个原子操作执行,从而减少锁定资源的时间和数量。

在需要对表进行读取操作时,可以使用锁定提示(例如使用WITH (NOLOCK))来避免对表的锁定,从而提高并发性能。

SQLServer数据库性能调优技巧

SQLServer数据库性能调优技巧

SQLServer数据库性能调优技巧第一章:SQLServer数据库性能调优概述SQLServer是一种常用的关系型数据库管理系统,在大型企业和云计算环境中广泛应用。

为了确保数据库的高性能和可靠性,进行数据库性能调优非常重要。

本章将介绍SQLServer数据库性能调优的概念和目标。

1.1 数据库性能调优的概念数据库性能调优是指通过分析和优化数据库的结构、查询、索引、存储和配置等方面的问题,以提高数据库系统的效率和性能。

优化数据库性能可以显著提升数据的访问速度、减少系统响应时间和提高数据库的处理能力。

1.2 数据库性能调优的目标数据库性能调优的主要目标是提高数据库的运行效率和用户的体验,具体目标包括:- 提高数据的访问速度:通过合理的查询优化和索引设计,加快数据的检索速度。

- 减少系统响应时间:通过调整数据库配置、优化SQL 查询和提高硬件性能等措施,缩短系统响应时间。

- 提高数据库的处理能力:通过合理的分区设计、并行处理和负载均衡等措施,提高数据库的并发处理能力。

第二章:SQLServer数据库性能调优基础在进行SQLServer数据库性能调优之前,有几个基础概念需要了解,包括数据库的结构、查询执行计划和索引等。

2.1 数据库的结构SQLServer数据库由多个表组成,每个表由多个行和列组成。

表有一定的关系,通过主键和外键来建立关联。

了解数据库的结构对于进行性能调优非常重要。

2.2 查询执行计划查询执行计划是SQLServer数据库执行查询语句时的执行路径和操作过程的详细描述。

通过分析查询执行计划,可以找到潜在的性能问题,并进行相应的优化。

2.3 索引索引是一种特殊的数据库对象,用于加快查询速度。

常见的索引类型包括聚集索引、非聚集索引和全文索引等。

合理设计索引可以提高查询的性能。

第三章:SQLServer数据库性能调优技巧本章将介绍一些常用的SQLServer数据库性能调优技巧,包括查询优化、索引优化、配置优化和硬件优化等。

sqlserver数据库 提高效率方法

sqlserver数据库 提高效率方法

SQL Server 数据库是一种常见的关系型数据库管理系统,它被广泛应用于企业级应用程序和数据管理系统中。

然而,随着数据库规模的增大和日常操作的复杂性增加,数据库的性能和效率往往成为关注的焦点。

提高SQL Server数据库的效率不仅可以显著改善系统的响应速度和稳定性,也可以节约资源和降低成本。

本文将介绍一些提高SQL Server 数据库效率的方法,帮助管理员和开发人员更好地管理和优化数据库系统。

1. 使用合适的索引索引是数据库中用来加快对表中数据的访问速度的结构,它可以通过创建索引来优化查询的性能。

在SQL Server中,通过对经常进行搜索,排序和过滤的数据列创建合适的索引,可以显著提高查询性能。

定期对索引进行维护和优化也是提高数据库效率的关键步骤。

2. 优化查询语句优化SQL查询语句对于提高数据库效率至关重要。

在编写查询语句时,应避免使用全表扫描,尽量减少数据量,避免使用不必要的连接和子查询,合理使用排序和分组等操作,以及避免使用模糊查询和通配符查询等低效操作。

3. 定期备份和恢复定期备份数据库是保障数据库安全的重要手段,同时备份还能够减少数据库维护的风险。

在备份时,管理员应该选择合适的备份策略,并对备份文件进行存储和管理,以确保数据库在出现故障或灾难时能够快速恢复。

4. 使用存储过程和触发器存储过程和触发器是SQL Server中重要的数据库对象,它们可以提高数据库的安全性和可维护性,同时还能减少网络流量和客户端执行开销,提高数据库的效率。

在编写存储过程和触发器时,应遵循一些最佳实践,如避免多次嵌套存储过程和触发器,减少对数据库的锁定和阻塞。

5. 使用物理分区技术SQL Server支持对数据表进行物理分区,这可以帮助管理员更好地管理数据,并根据需求对数据进行调优。

通过物理分区,可以提高查询和数据加载的性能,同时也方便了数据备份和恢复。

总结通过上述方法,可以显著提高SQL Server数据库的性能和效率,使其能够更好地满足企业应用程序和数据管理系统的需求。

当sqlserver数据量很大时,如何优化表格能加快处理速度

当sqlserver数据量很大时,如何优化表格能加快处理速度

表设计和查询的一些参考1.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。

现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。

索引的使用要恰到好处,其使用原则如下:●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。

比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。

如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

● 使用系统工具。

如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。

在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。

另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序应当简化或避免对大型表进行重复的排序。

当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。

以下是一些影响因素:●索引中不包括一个或几个待排序的列;●group by或order by子句中列的次序与索引的次序不一样;●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。

如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。

比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQLServer语句优化1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。

我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

下面的表总结了何时使用聚集索引或非聚集索引(很重要):动作描述使用聚集索引使用非聚集索引列经常被分组排序应应返回某范围内的数据应不应一个或极少不同值不应不应小数目的不同值应不应大数目的不同值不应应频繁更新的列不应应外键列应应主键列应应频繁修改索引列不应应事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。

如:返回某范围内的数据一项。

比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。

结合实际,谈索引使用的误区理论的目的是应用。

虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。

下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。

1、主键就是聚集索引这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。

虽然SQL SERVER默认是在主键上建立聚集索引的。

通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。

我们的这个办公自动化的实例中的列Gid就是如此。

此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。

这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。

显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。

从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。

在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。

这就使让ID号这个主键作为聚集索引成为一种资源浪费。

其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会负作用,但对于查询速度并没有影响。

在办公自动化系统中,无论是系统首页显示的需要用户签收的文件、会议还是用户进行文件查询等任何情况下进行数据查询都离不开字段的是“日期”还有用户本身的“用户名”。

通常,办公自动化的首页会显示每个用户尚未签收的文件或会议。

虽然我们的where语句可以仅仅限制当前用户尚未签收的情况,但如果您的系统已建立了很长时间,并且数据量很大,那么,每次每个用户打开首页的时候都进行一次全表扫描,这样做意义是不大的,绝大多数的用户1个月前的文件都已经浏览过了,这样做只能徒增数据库的开销而已。

事实上,我们完全可以让用户打开系统首页时,数据库仅仅查询这个用户近3个月来未阅览的文件,通过“日期”这个字段来限制表扫描,提高查询速度。

如果您的办公自动化系统已经建立的2年,那么您的首页显示速度理论上将是原来速度8倍,甚至更快。

在这里之所以提到“理论上”三字,是因为如果您的聚集索引还是盲目地建在ID这个主键上时,您的查询速度是没有这么高的,即使您在“日期”这个字段上建立的索引(非聚合索引)。

下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条):(1)仅在主键上建立聚集索引,并且不划分时间段:Select gid,fariqi,neibuyonghu,title from tgongwen用时:128470毫秒(即:128秒)(2)在主键上建立聚集索引,在fariq上建立非聚集索引:select gid,fariqi,neibuyonghu,title from Tgongwenwhere fariqi> dateadd(day,-90,getdate())用时:53763毫秒(54秒)(3)将聚合索引建立在日期列(fariqi)上:select gid,fariqi,neibuyonghu,title from Tgongwenwhere fariqi> dateadd(day,-90,getdate())用时:2423毫秒(2秒)虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。

事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第1、2种情况,在网页上的表现就是超时,根本就无法显示。

这也是我摒弃ID列作为聚集索引的一个最重要的因素。

得出以上速度的方法是:在各个select语句前加:declare @d datetimeset @d=getdate()并在select语句后加:select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())2、只要建立索引就能显著提高查询速度事实上,我们可以发现上面的例子中,第2、3条语句完全相同,且建立索引的字段也相同;不同的仅是前者在fariqi字段上建立的是非聚合索引,后者在此字段上建立的是聚合索引,但查询速度却有着天壤之别。

所以,并非是在任何字段上简单地建立索引就能提高查询速度。

从建表的语句中,我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。

在此字段上建立聚合索引是再合适不过了。

在现实中,我们每天都会发几个文件,这几个文件的发文日期就相同,这完全符合建立聚集索引要求的:“既不能绝大多数都相同,又不能只有极少数相同”的规则。

由此看来,我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。

3、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度上面已经谈到:在进行数据查询时都离不开字段的是“日期”还有用户本身的“用户名”。

既然这两个字段都是如此的重要,我们可以把他们合并起来,建立一个复合索引(compound index)。

很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu 排在后列):(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5''查询速度:2513毫秒(2)select gid,fariqi,neibuyonghu,title from Tgongwenwhere fariqi>''2004-5-5'' and neibuyonghu=''办公室''查询速度:2516毫秒(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公室''查询速度:60280毫秒从以上试验中,我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。

当然,语句1、2的查询速度一样是因为查询的条目数一样,如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。

同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。

四、其他书上没有的索引使用经验总结1、用聚合索引比用不是聚合索引的主键速度快下面是实例语句:(都是提取25万条数据)select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''使用时间:3326毫秒select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid<=250000使用时间:4470毫秒这里,用聚合索引比用不是聚合索引的主键速度快了近1/4。

2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by fariqi用时:12936select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gid用时:18843这里,用聚合索引比用一般的主键作order by时,速度快了3/10。

事实上,如果数据量很小的话,用聚集索引作为排序列要比使用非聚集索引速度快得明显的多;而数据量如果很大的话,如10万以上,则二者的速度差别不明显。

3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个:select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-1-1''用时:6343毫秒(提取100万条)select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-6-6''用时:3170毫秒(提取50万条)select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''用时:3326毫秒(和上句的结果一模一样。

相关文档
最新文档