ホームページ データベース mysql チュートリアル 理解SQL SERVER中的逻辑读,预读和物理读

理解SQL SERVER中的逻辑读,预读和物理读

Jun 07, 2016 pm 05:36 PM
トレーニングコース データベースクエリ

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对于逻辑读,预读,和物理读的单位是页.

image

      SQL SERVER一页的总大小为:8K

      但是这一页存储的数据会是:8K=8192字节-96字节(页头)-36字节(行偏移)=8060字节

      所以每一页用于存储的实际大小为8060字节.

      比如上面AdventureWorks中的Person.Address表,通过SSMS看到这个表的数据空间为:

image

      我们可以通过公式大概推算出占用了多少页:2.250*1024*1024/8060(每页的数据容量)≈293 - 表中非数据占用的空间≈290(上图中的逻辑读取数)

SQL SERVER查询语句执行的顺序

      SQL SERVER查询执行的步骤如果从微观来看,那将会非常多。这里为了讲述逻辑读等概念,,我从比较高的抽象层次来看:

image

      图有些粗糙。

      下面我解释一下图。当遇到一个查询语句时,SQL SERVER会走第一步,分别为生成执行计划(占用CPU和内存资源),同步的用估计的数据去磁盘中取得需要取的数据(占用IO资源,这就是预读),注意,两个第一步是并行的,SQL SERVER通过这种方式来提高查询性能.

      然后查询计划生成好了以后去缓存读取数据.当发现缓存缺少所需要的数据后让缓存再次去读硬盘(物理读)

      最后从缓存中取出所有数据(逻辑读)。

      下面我再通过一个简单的例子说明一下:

image

      这个估计的页数数据可以通过这个DMV看到:

image

    当我们第一次查询完成后,再次进行查询时,所有请求的数据这时已经在缓存中,SQL SERVER这时只要对缓存进行读取就行了,也就是只用进行逻辑读:

image

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

React Query でデータベース クエリのエラー処理メカニズムを実装する React Query でデータベース クエリのエラー処理メカニズムを実装する Sep 28, 2023 pm 02:40 PM

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

Java開発におけるデータベースクエリ数オーバーフローの問題を解決する方法 Java開発におけるデータベースクエリ数オーバーフローの問題を解決する方法 Jun 29, 2023 pm 06:46 PM

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

Laravel ミドルウェア: データベースのクエリとパフォーマンスの監視をアプリケーションに追加します。 Laravel ミドルウェア: データベースのクエリとパフォーマンスの監視をアプリケーションに追加します。 Jul 28, 2023 pm 02:53 PM

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

PHP を使用してデータベースにクエリを実行し、結果を表示する方法 PHP を使用してデータベースにクエリを実行し、結果を表示する方法 May 02, 2024 pm 02:15 PM

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

PHP データベース クエリのヒント: mysqli_query 関数を使用して SQL クエリを実行する方法 PHP データベース クエリのヒント: mysqli_query 関数を使用して SQL クエリを実行する方法 Jul 29, 2023 pm 04:42 PM

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

PHP ハイパフォーマンス: データベースクエリを最適化する方法 PHP ハイパフォーマンス: データベースクエリを最適化する方法 Jun 04, 2023 am 08:40 AM

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

PHP でデータベース クエリと結果マッピングを実装するにはどうすればよいですか? PHP でデータベース クエリと結果マッピングを実装するにはどうすればよいですか? Jul 01, 2023 am 09:04 AM

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

Laravel 開発: データベース クエリに Eloquent ORM を使用する方法は? Laravel 開発: データベース クエリに Eloquent ORM を使用する方法は? Jun 14, 2023 pm 12:47 PM

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

See all articles