Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL查询需要更多时间查询SQL SERVER 2008 r2_Sql Server 2008 - Fatal编程技术网

Sql server 2008 SQL查询需要更多时间查询SQL SERVER 2008 r2

Sql server 2008 SQL查询需要更多时间查询SQL SERVER 2008 r2,sql-server-2008,Sql Server 2008,下面是sql查询,第一次查询sql Server 2008 r2数据库需要47秒 但这是它第二次在2-3秒内查询。我不知道wt会是个问题。我是sql server新手。请帮助我,提前谢谢 SELECT DISTINCT(SectionName) , Name, DispalyName, TypeVal FROM ReportData WHERE FileVersion = 1 ORDER BY SectionName; 在上面的查询报告中,数据表包含2154514行,但它只会查询241行

下面是sql查询,第一次查询sql Server 2008 r2数据库需要47秒

但这是它第二次在2-3秒内查询。我不知道wt会是个问题。我是sql server新手。请帮助我,提前谢谢

SELECT DISTINCT(SectionName) , Name, DispalyName, TypeVal 
FROM ReportData 
WHERE FileVersion = 1 
ORDER BY SectionName;

在上面的查询报告中,数据表包含2154514行,但它只会查询241行,因为可能是不同的关键字。

第一次运行查询执行计划时,它会被缓存。因此,当您第二次运行同一查询时,它将使用该计划,从而消除创建新计划的开销。这减少了执行查询和返回结果的时间

你可以在网上阅读这篇文章

其次,SQL Server提供了一种新的方法来减少每次必须从磁盘读取数据所造成的影响。进行查询时,读取的数据存储在缓冲区缓存中。如果您运行的是同一个查询,我相信它将从缓冲区缓存中读取,而不是进入磁盘,这将大大减少执行时间

另一方面,我认为47秒可能是一个合理的时间,因为您的表中有200多万条记录,并且您的查询也进行过滤和排序。您可能希望为用于筛选或分组的列编制索引

e、 g.您可以在SectionName上创建索引,您可以在DISTINCT子句中指定该索引,如下所示:

CREATE INDEX idx_SectionName on ReportData(SectionName)

删除不同的关键字,使用分组或子查询,添加所需的索引;如果所有这些都没有帮助,那么重新考虑数据库结构或查询逻辑。后续查询变得更快通常表明首先从硬盘读取大量数据。好的,感谢ReplyTanks的输入,我也在这样做。如果您不介意,可以为我上面的sql查询编写CREATEINDEX语句。无论如何,非常感谢你的帮助。