什么是sql server中的逻辑读取?如何减少逻辑?

Nan*_*dha 25 sql logical-reads sql-server-2012

从我所有的搜索到加速sql server中的查询,源代表说通过使用正确的where子句来减少逻辑读取.实际上我需要知道如果从前端获得请求时sql server中的存储过程如何工作流程,以及在存储过程中避免的一些提示.

Bac*_*its 44

Microsoft白皮书是Retired SQL Server 2000技术文档(p387,最初来自SQL Server Architecture(SQL Server 2000))的一部分,它有一个很好的定义:

SQL Server实例的I/O分为逻辑I/O和物理I/O. 每次数据库引擎从缓冲区缓存请求页面时,都会发生逻辑读取.如果页面当前不在缓冲区高速缓存中,则执行物理读取以将页面读入缓冲区高速缓存.如果页面当前在缓存中,则不会生成物理读取; 缓冲区缓存只是使用内存中已有的页面.

因此,逻辑读取是指查询引擎需要读取数据的时间.首先,它在内存中看起来.如果页面已经在SQL Server的内存中,那么它就会使用它.如果它无法在内存中找到它,则会触发物理读取,并从磁盘读取数据页.没有后续物理读取的逻辑读取基本上是"缓存命中".

缓冲区缓存(也称为缓冲池)是SQL Server用于解决查询的主要工作内存.设置SQL Server将使用的内存量时,您将控制可用缓冲区高速缓存的大小.

但是,告诉您在不查看查询或了解表中包含的内容以及数据的外观以及数据如何编制索引和组织的情况下您需要执行的操作基本上是不可能的.

大量的逻辑读取可能不一定是坏的 - 或者更确切地说,不一定是可以预防的.什么是坏的是过多的逻辑读取.如果您要返回3行数据,但查询引擎必须扫描表中的2亿行才能执行此操作,这将非常慢,您可以通过重写查询或添加索引来改进它.

我首先看一下存储过程中的查询有多复杂.值得注意的是,我会寻找丢失的索引.如果你正在运行SELECT * FROM BigTable WHERE ProductDate >= '01/01/2014',那么我会看到有一个索引ProductDate.SELECT * FROM BigTable ORDER BY ProductDate DESC但是,如果你正在运行,那么,索引仍然有用,但是你仍然需要返回整个数据集,所以你必须要读完整个表.另外,请注意逻辑读取是指页面读取,因此如果ProductDate问题是均匀分布在磁盘周围,您可能需要读取每个页面或几乎每个页面.

除此之外,可能是桌子上的统计数据已经过时了.如果你已经向表中添加了20,000行,而SQL Server仍然认为那里只有2000行,那么它将完全抛出查询计划.

  • 因为我之前对这些事情很着迷.我有一点关注执行计划.当sql计划说(索引搜索)没有(索引扫描)时,索引确实会影响性能.扫描就像读它们一样,但寻求就像缓存它们并找到确切的那些.所以逻辑和更快的读取@NandhaKumarR你可以使用WITH(Forceseek)子句 (2认同)

Tho*_*ner 26

逻辑读取是指您从数据库中读取的记录.我们来看一个小而愚蠢的例子:

select *
from
(
  select *
  from orders
  where client = 1234
)
where item = 9876;
Run Code Online (Sandbox Code Playgroud)

在这里,您可以从客户端1234中选择所有订单.然后您只需要获取项目9876的订单.因此(如果优化器没有看到这一点并在内部优化您的查询),您在第一步中选择的记录多于需要的数量.通过一步应用这两个标准来减少逻辑读取(以及相应的大型中间结果):

select *
from orders
where client = 1234
and item = 9876;
Run Code Online (Sandbox Code Playgroud)

(这也可能影响物理读取,但不一定必须.例如,第一个查询可以访问100个记录,然后将其减少到10个,而第二个只读取10个.但是所有100个记录都可能在一个磁盘块中因此,两个语句都读取一个磁盘块,即进行一次物理读取.顺便说一下,如果数据恰好已经在dbms缓存中,即在内存中,它甚至可以是零物理读取.这也告诉我们物理对于查询,读取可能不同,而只要查询和数据不被更改,逻辑读取就保持不变.)

  • 我很确定这两个查询会导致完全相同的执行计划,因为优化器足够聪明,可以将外部条件推送到派生表中.因此,两个查询将具有相同数量的逻辑读取. (6认同)
  • @a_horse_with_no_name:是的,如果优化器无法对此进行优化,我也会感到惊讶.但它只是一个简单的例子. (5认同)