ホームページ データベース mysql チュートリアル SQL参数化查询的另一个理由 命中执行计划

SQL参数化查询的另一个理由 命中执行计划

Jun 07, 2016 pm 06:07 PM
コマンドライン 実行計画

为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间

1概述

SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)。而这些步骤都是需要运行成本,所以在数据库中有一个叫做执行计划的东西,编译器会将编译过后的SQL存入执行计划当中,当遇到同样的SQL时,就直接调用执行计划来执行,而不需要再次编译。
通过对上面执行计划的认识,为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间。

2相关SQL

2.1查看当前数据库中所有的执行计划:
代码如下:
SELECT cp.usecounts AS '使用次数'
,objtype AS '类型'
,st.[text] AS 'SQL文本'
,plan_handle AS '计划句柄'
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text not like '%sys%'

2.2删除执行计划
代码如下:
--删除所有计划
DBCC FREEPROCCACHE

2.3测试脚本(创建员工表,并向其插入1000条数据)
代码如下:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'))
DROP TABLE [dbo].Employee
GO
--人员表
CREATE TABLE dbo.Employee
(
id int,
name nvarchar(50)
);

--插入测试数据
DECLARE @I INT=0,@ENDI INT=1000;
WHILE(@IBEGIN
SET @I+=1;
INSERT dbo.Employee(id,name) VALUES(@I,'蒋大华'+CAST(@I AS NVARCHAR(20)));
END;

3测试执行计划

3.1 先执行删除所有执行计划,然后执行SELECT * FROM Employee ,最后查看执行计划(2.1中的查看执行计划脚本)如下图

即SQL SERVER会为每一条SQL建立一个执行计划,并将它缓存起来

3.2 再运行一次SQL: SELECT * FROM Employee,并查看执行计划

可以看到这个计划的重用次数为2,即这个计划被重用了;

3.3 修改SQL:SELECT * FROM Employee(在SELECT后多加一个空格),执行并查看执行计划

结果又新添加一个执行计划,即SQL SERVER认为这是两个不同的SQL语句并分别建立了执行计划;

4重用执行计划——使用参数化查询方法

4.1 未参数化SQL

代码如下:
string selectCmdText = string.Format(@"SELECT * FROM Employee WHERE name='{0}'",” 蒋大华1”);
SQLHelper.ExecuteNonQuery(SQLHelper.DefaulConnectiontString, System.Data.CommandType.Text, selectCmdText, null);

查看执行计划:

即当执行一个未参数化SQL时,SQL SERVER需要先将其转换成一个参数SQL并执行它。一共需要两执行计划

然后再执行下面的代码(查询的条件变了)
代码如下:
string selectCmdText = string.Format(@"SELECT * FROM Employee WHERE name='{0}'",” 蒋大华2”);
SQLHelper.ExecuteNonQuery(SQLHelper.DefaulConnectiontString, System.Data.CommandType.Text, selectCmdText, null);

查看执行计划

此时不需要再准备一个准备的SQL,但还是需要再产生一个执行计划,并缓存下来;

4.2 参数化SQL
代码如下:
SqlParameter[] param = { new SqlParameter("@name", txtEmployeeName.Text.Trim()) };
string selectCmdText = string.Format(@"SELECT * FROM Employee WHERE name=@name");
SQLHelper.ExecuteNonQuery(SQLHelper.DefaulConnectiontString, System.Data.CommandType.Text, selectCmdText, param);

输入参数并执行,然后查看执行计划:

只需要一个准备SQL,然后,输入不同的参数,并执行,再查看执行计划

重用执行计划,perfect...

5总结

总的来说,SQL语句在执行时,会生成执行计划并将它缓存起来,我们可以通过提高使用缓存中的执行计划次数,来减少数据库的压力。而使用参数化的SQL是一个很好的选择,参数化查询的作用不仅只有防止SQL注入,还可以提高缓存中执行计划使用次数。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

コマンドライン経由で Mac で低電力モードを有効にする コマンドライン経由で Mac で低電力モードを有効にする Apr 14, 2023 pm 12:13 PM

馴染みのない人のために説明すると、低電力モードは Mac のエネルギー使用量を削減し、一時的にパフォーマンスを犠牲にしてバッテリー寿命を延ばす可能性がありますが、ほとんどのユーザーにとっては、特に低下に気づかない程度にうまく処理されています。これは、MacBook Pro または Air のバッテリー寿命を最大限に延ばそうとしている Mac ラップトップ ユーザーにとって、非常に便利なモードです。コマンドラインから Mac 低電力モードを有効にする ターミナルから、任意の Mac ラップトップで次のコマンド文字列を入力します。 sudo pmset -a lowpowermode 1 sudo の要求に応じて Enter キーを押し、管理者パスワードを入力して認証します。

コマンド ライン ツール sxstrace.exe を効果的に使用する方法を学習します。 コマンド ライン ツール sxstrace.exe を効果的に使用する方法を学習します。 Jan 04, 2024 pm 08:47 PM

win10システムを使用している多くの友人は、ゲームをプレイするときやシステムをインストールするときに、アプリケーションの並列構成が正しくないためにアプリケーションを起動できないという問題に遭遇しました。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください。これは、オペレーティング システムに対応する権限がないことが原因である可能性があります。以下の具体的なチュートリアルを見てみましょう。コマンド ライン sxstrace.exe ツールの使用に関するチュートリアル 1. この問題は通常、プログラムやゲームのインストール時に発生し、次のプロンプトが表示されます: アプリケーションの並列構成が正しくないため、アプリケーションを開始できません。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください。 2.スタート →

コマンドライン経由で Ubuntu 20.04 を 22.04 にアップグレードする コマンドライン経由で Ubuntu 20.04 を 22.04 にアップグレードする Mar 20, 2024 pm 01:25 PM

この記事では、Ubuntu 20.04 を 22.04 にアップグレードする手順について詳しく説明します。 Ubuntu 20.04 を使用しているユーザーは、バージョン 22.04 によってもたらされる新機能と利点を見逃しています。より良いエクスペリエンスとセキュリティを得るために、適時に新しい Ubuntu バージョンにアップグレードすることをお勧めします。 Ubuntu22.04 のコード名は「Jamie Jellyfish」です。最新の LTS バージョンを入手する方法を見てみましょう。コマンドライン経由で Ubuntu 20.04 を 22.04 にアップグレードする方法 コマンドラインをマスターすると有利になります。 GUI を介して Ubuntu を更新することもできますが、ここではコマンド ラインを使用することに重点を置きます。まず、次のコマンドを使用して、現在実行中の Ubuntu のバージョンを確認しましょう: $

Linux システムの一般的なコマンドとショートカット Linux システムの一般的なコマンドとショートカット Jun 18, 2023 am 08:46 AM

Linux オペレーティング システムの普及に伴い、Linux システムの基本的なコマンドとショートカットを学習し、理解する必要がある人が増えています。この記事では、初心者がLinuxのシステムを理解し、作業効率を向上させるために、よく使われるLinuxのコマンドとショートカットを紹介します。よく使用されるコマンド 1.1 ls コマンド ls コマンドは、Linux で最もよく使用されるコマンドの 1 つです。これは主に、現在のディレクトリ内のファイルとサブディレクトリを一覧表示するために使用されます。一般的に使用されるオプションは次のとおりです。 -l: ファイル タイプを含むファイル情報を長い形式で表示します。

Pythonのコマンドラインパラメータの詳しい説明 Pythonのコマンドラインパラメータの詳しい説明 Dec 18, 2023 pm 04:13 PM

Python では、コマンド ラインを介してパラメータをスクリプトに渡すことができます。これらのパラメーターをスクリプト内で使用して、さまざまな入力に基づいてさまざまなアクションを実行できます。 Python コマンド ライン パラメータの詳細な説明: 1. 位置パラメータ: コマンド ラインで順番にスクリプトに渡されるパラメータ。スクリプト内の位置を通じてアクセスできます。 2. コマンド ライン オプション: - または - で始まるパラメータ、通常使用されます。スクリプトの特定のオプションまたはフラグを指定するには; 3. パラメータ値を渡す: コマンド ラインを通じてパラメータ値を渡します。

Django の概要: コマンド ラインを使用して最初の Django プロジェクトを作成する Django の概要: コマンド ラインを使用して最初の Django プロジェクトを作成する Feb 19, 2024 am 09:56 AM

Django プロジェクトの旅を始めましょう: コマンド ラインから開始して、最初の Django プロジェクトを作成します。Django は、強力で柔軟な Web アプリケーション フレームワークです。Python をベースにしており、Web アプリケーションの開発に必要な多くのツールと機能を提供します。この記事では、コマンド ラインから最初の Django プロジェクトを作成する方法を説明します。始める前に、Python と Django がインストールされていることを確認してください。ステップ 1: プロジェクト ディレクトリを作成する まず、コマンド ライン ウィンドウを開き、新しいディレクトリを作成します。

javac が内部コマンド、外部コマンド、または動作可能なプログラムとして認識されません。 javac が内部コマンド、外部コマンド、または動作可能なプログラムとして認識されません。 Jun 08, 2023 pm 04:54 PM

javac が内部コマンドまたは外部コマンドではなく、動作可能なプログラムではない問題の解決策: 1. まず、最新バージョンの JDK を公式 Web サイトからダウンロードしてインストールします; 2. システム環境変数を設定し、JDK のインストール パスを追加しますパスに追加します; 3. コンピュータ コマンドを入力します。 インターフェイスを実行し、「java -v」と入力すると、バージョン番号が表示されます。

Linux コマンド ライン ツールを使用してログの集計と統計を実行するにはどうすればよいですか? Linux コマンド ライン ツールを使用してログの集計と統計を実行するにはどうすればよいですか? Jul 30, 2023 pm 10:07 PM

Linux コマンド ライン ツールを使用してログの集計と統計を実行するにはどうすればよいですか? Linux システムを管理および保守する場合、ログ記録は非常に重要なタスクです。ログを通じて、システム動作の表示、問題のトラブルシューティング、およびパフォーマンス分析を行うことができます。大規模システムではログの数が膨大になることが多く、ログをいかに効率的に集計・集計するかが運用保守担当者の課題となっています。 Linux システムでは、ログの集計と統計にコマンド ライン ツールを使用できます。以下に、一般的に使用されるいくつかのコマンドラインを紹介します。

See all articles