理解SQL SERVER中的逻辑读,预读和物理读
www.91xueit.com韩老师IT系统培训课程优化SQL性能,你必须理解数据库查询数据的细节,在查询分析器中打开IO统计,setstatisticsioon,就能查看查询过程关于逻辑
韩老师IT系统培训课程
优化SQL性能,你必须理解数据库查询数据的细节,在查询分析器中打开IO统计,set statistics io on ,就能查看查询过程 关于逻辑读,预读和物理读的显示。下面给大家讲解数据库查询数据的细节,你也就明白了什么是关于逻辑读,预读和物理读 要想把这几个概念弄清楚必须了解数据库查询数据的细节。
SQL SERVER数据存储的形式在谈到几种不同的读取方式之前,首先要理解SQL SERVER数据存储的方式.SQL SERVER存储的最小单位为页(Page).每一页大小为8k,SQL SERVER对于页的读取是原子性,要么读完一页,要么完全不读,不会有中间状态。而页之间的数据组织结构为B树(请参考我之前的博文).所以SQL SERVER对于逻辑读,预读,和物理读的单位是页.
SQL SERVER一页的总大小为:8K
但是这一页存储的数据会是:8K=8192字节-96字节(页头)-36字节(行偏移)=8060字节
所以每一页用于存储的实际大小为8060字节.
比如上面AdventureWorks中的Person.Address表,通过SSMS看到这个表的数据空间为:
我们可以通过公式大概推算出占用了多少页:2.250*1024*1024/8060(每页的数据容量)≈293 - 表中非数据占用的空间≈290(上图中的逻辑读取数)
SQL SERVER查询语句执行的顺序SQL SERVER查询执行的步骤如果从微观来看,那将会非常多。这里为了讲述逻辑读等概念,,我从比较高的抽象层次来看:
下面我解释一下图。当遇到一个查询语句时,SQL SERVER会走第一步,分别为生成执行计划(占用CPU和内存资源),同步的用估计的数据去磁盘中取得需要取的数据(占用IO资源,这就是预读),注意,两个第一步是并行的,SQL SERVER通过这种方式来提高查询性能.
然后查询计划生成好了以后去缓存读取数据.当发现缓存缺少所需要的数据后让缓存再次去读硬盘(物理读)
最后从缓存中取出所有数据(逻辑读)。
下面我再通过一个简单的例子说明一下:
这个估计的页数数据可以通过这个DMV看到:
当我们第一次查询完成后,再次进行查询时,所有请求的数据这时已经在缓存中,SQL SERVER这时只要对缓存进行读取就行了,也就是只用进行逻辑读:

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ReactQuery でのデータベース クエリのエラー処理メカニズムの実装 ReactQuery はデータを管理およびキャッシュするためのライブラリであり、フロントエンド分野での人気が高まっています。アプリケーションでは、データベースと対話する必要があることが多く、データベースのクエリによってさまざまなエラーが発生する可能性があります。したがって、アプリケーションの安定性とユーザー エクスペリエンスを確保するには、効果的なエラー処理メカニズムを実装することが重要です。最初のステップは ReactQuery をインストールすることです。次のコマンドを使用してプロジェクトに追加します: n

Java 開発におけるデータベース クエリ数オーバーフローの問題を解決する方法 タイトル: Java 開発におけるデータベース クエリ数オーバーフロー問題を解決する方法 要約: インターネットの発展とデータ量の徐々に増加に伴い、データベースクエリも増加しています。 Java 開発では、メモリの制限により、データベース クエリの数がオーバーフローするという問題が発生することがあります。この記事では、この問題を解決するいくつかの方法を紹介します。本文: データベース クエリ ステートメントの最適化 まず、データベース クエリ ステートメントの最適化の観点からこの問題を解決できます。私たちは使うことができます

Laravel ミドルウェア: アプリケーションへのデータベース クエリとパフォーマンス監視の追加 はじめに: Web アプリケーションを開発する場合、データ クエリとパフォーマンス監視は非常に重要です。 Laravel は、これらの要件を処理する便利な方法、つまりミドルウェアを提供します。ミドルウェアはリクエストとレスポンスの間を処理するテクノロジーで、リクエストがコントローラーに到達する前、またはレスポンスがユーザーに返された後にいくつかのロジックを実行できます。この記事では、Laravel ミドルウェアを使用してデータベース クエリとパフォーマンス監視を実装する方法を紹介します。 1. 真ん中を作る

PHP を使用してデータベースにクエリを実行し、結果を表示する手順: データベースに接続し、結果を表示し、クエリ結果の行を走査して、特定の列データを出力します。

PHP データベース クエリのヒント: mysqli_query 関数を使用して SQL クエリを実行する方法 PHP アプリケーションを開発する場合、データベースとの対話は非常に重要な部分です。クエリ操作の場合、PHP には SQL ステートメントを実行するためのいくつかの組み込み関数が用意されています。この記事では、開発者がデータベース クエリ操作をより効率的に実行できるようにする mysqli_query 関数の使用方法に焦点を当てます。 1. mysqli_query 関数の概要 mysqli_query 関数は、PHP の組み込み関数です。

現在のインターネット時代では、データが爆発的に増加しており、データベースはサービスの中核となっています。データベースのパフォーマンスと速度は、Web サイトとそのアプリケーションのユーザー エクスペリエンスと使いやすさに直接影響するため、データベース クエリをどのように最適化するかは開発者が注力する必要がある問題です。 PHP言語では、データベースのクエリ文を最適化することで、プログラムのパフォーマンスを向上させ、サーバーの負荷を軽減し、サービスの安定性を向上させることができます。この記事では、次の観点からデータベース クエリを最適化する方法を紹介します。 1. クエリ実行時のインデックスの使用

PHP は、非常に柔軟性が高く、習得と使用が簡単な、非常に人気のあるサーバーサイド プログラミング言語です。データベースのクエリと結果のマッピングは、Web アプリケーションを開発する際の非常に重要な手順です。この記事では、PHP がデータベースのクエリと結果のマッピングをどのように実装するかを見ていきます。まず、データベース クエリと結果マッピングとは何かを理解しましょう。データベース クエリは、データベース サーバーを通じてデータを取得するプロセスです。結果マッピングは、データベース クエリの結果をプログラムで使用できるデータ構造に変換するプロセスです。 PHP が提供する

Laravel は、Web アプリケーションの開発を高速化するための一連のツールとヘルパー機能を提供する人気のある PHP 開発フレームワークです。その中で、EloquentORM は、Laravel フレームワークでのデータベース操作に使用されるツールの 1 つであり、Laravel 開発者がデータベースをより迅速にクエリおよび操作できるようになります。この記事では、データベース クエリに EloquentORM を使用する方法を詳しく説明します。 EloquentORM をインストールする まず、インストールする必要があります
