Heim Datenbank MySQL-Tutorial 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注入,还可以提高缓存中执行计划使用次数。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Aktivieren Sie den Energiesparmodus auf dem Mac über die Befehlszeile Aktivieren Sie den Energiesparmodus auf dem Mac über die Befehlszeile Apr 14, 2023 pm 12:13 PM

Für diejenigen, die es nicht kennen: Der Energiesparmodus reduziert den Energieverbrauch Ihres Mac und verlängert möglicherweise die Akkulaufzeit vorübergehend auf Kosten der Leistung. Er lässt sich jedoch so gut handhaben, dass die meisten Benutzer keine besonderen Verschlechterungen bemerken. Dies ist ein sehr nützlicher Modus, wenn Sie ein Mac-Laptop-Benutzer sind und versuchen, die größtmögliche Akkulaufzeit aus Ihrem MacBook Pro oder Air herauszuholen. Aktivieren Sie den Mac-Energiesparmodus über die Befehlszeile. Geben Sie im Terminal die folgende Befehlszeichenfolge auf einem beliebigen Mac-Laptop ein: sudo pmset -a lowpowermode 1 Drücken Sie die Eingabetaste, wie von sudo gefordert, und geben Sie zur Authentifizierung Ihr Administratorkennwort ein.

Erfahren Sie, wie Sie das Befehlszeilentool sxstrace.exe effektiv nutzen Erfahren Sie, wie Sie das Befehlszeilentool sxstrace.exe effektiv nutzen Jan 04, 2024 pm 08:47 PM

Viele Freunde, die das Win10-System verwenden, sind beim Spielen oder bei der Installation des Systems auf dieses Problem gestoßen. Die Anwendung kann nicht gestartet werden, da die parallele Konfiguration der Anwendung falsch ist. Weitere Informationen finden Sie im Anwendungsereignisprotokoll oder verwenden Sie das Befehlszeilentool sxstrace.exe. Dies kann daran liegen, dass das Betriebssystem nicht über die entsprechenden Berechtigungen verfügt. Schauen wir uns das spezifische Tutorial unten an. Anleitung zur Verwendung des Befehlszeilentools sxstrace.exe 1. Dieses Problem tritt normalerweise bei der Installation von Programmen und Spielen auf. Die Meldung lautet: Die Anwendung kann nicht gestartet werden, da die parallele Konfiguration der Anwendung falsch ist. Weitere Informationen finden Sie im Anwendungsereignisprotokoll oder verwenden Sie das Befehlszeilentool sxstrace.exe. 2. Starten Sie →

Allgemeine Befehle und Verknüpfungen in Linux-Systemen Allgemeine Befehle und Verknüpfungen in Linux-Systemen Jun 18, 2023 am 08:46 AM

Mit der weit verbreiteten Anwendung des Linux-Betriebssystems müssen immer mehr Menschen die grundlegenden Befehle und Verknüpfungen im Linux-System erlernen und verstehen. In diesem Artikel stellen wir einige häufig verwendete Linux-Befehle und -Verknüpfungen vor, um Anfängern das Verständnis des Linux-Systems zu erleichtern und die Arbeitseffizienz zu verbessern. Häufig verwendete Befehle 1.1 ls-Befehl Der ls-Befehl ist einer der am häufigsten verwendeten Befehle unter Linux. Es wird hauptsächlich zum Auflisten von Dateien und Unterverzeichnissen im aktuellen Verzeichnis verwendet. Häufig verwendete Optionen sind: -l: Dateiinformationen im Langformat anzeigen, einschließlich Dateityp

Aktualisieren Sie Ubuntu 20.04 über die Befehlszeile auf 22.04 Aktualisieren Sie Ubuntu 20.04 über die Befehlszeile auf 22.04 Mar 20, 2024 pm 01:25 PM

In diesem Artikel werden die Schritte zum Upgrade von Ubuntu 20.04 auf 22.04 detailliert beschrieben. Benutzer, die Ubuntu 20.04 verwenden, haben die neuen Funktionen und Vorteile der Version 22.04 verpasst. Um ein besseres Erlebnis und mehr Sicherheit zu erhalten, wird empfohlen, rechtzeitig auf eine neuere Ubuntu-Version zu aktualisieren. Ubuntu22.04 trägt den Codenamen „Jamie Jellyfish“. Lassen Sie uns herausfinden, wie Sie die neueste LTS-Version erhalten! So aktualisieren Sie Ubuntu 20.04 auf 22.04 über die Befehlszeile. Die Beherrschung der Befehlszeile verschafft Ihnen einen Vorteil. Während es möglich ist, Ubuntu über die GUI zu aktualisieren, wird unser Fokus auf der Befehlszeile liegen. Überprüfen wir zunächst die aktuell ausgeführte Ubuntu-Version mit dem folgenden Befehl: $

Detaillierte Erläuterung der Python-Befehlszeilenparameter Detaillierte Erläuterung der Python-Befehlszeilenparameter Dec 18, 2023 pm 04:13 PM

In Python können Parameter über die Befehlszeile an Skripte übergeben werden. Diese Parameter können in Skripten verwendet werden, um unterschiedliche Aktionen basierend auf unterschiedlichen Eingaben auszuführen. Detaillierte Erläuterung der Python-Befehlszeilenparameter: 1. Positionsparameter: Parameter, die der Reihe nach in der Befehlszeile übergeben werden. Auf sie kann über die Position innerhalb des Skripts zugegriffen werden. 2. Befehlszeilenoptionen: Parameter, die mit - oder - beginnen, werden normalerweise verwendet um bestimmte Optionen oder Flags für das Skript anzugeben; 3. Parameterwerte übergeben: Parameterwerte über die Befehlszeile übergeben.

Wie führt man Protokollaggregation und Statistiken über Linux-Befehlszeilentools durch? Wie führt man Protokollaggregation und Statistiken über Linux-Befehlszeilentools durch? Jul 30, 2023 pm 10:07 PM

Wie führt man Protokollaggregation und Statistiken über Linux-Befehlszeilentools durch? Die Protokollierung ist eine sehr wichtige Aufgabe bei der Verwaltung und Wartung von Linux-Systemen. Mithilfe von Protokollen können Sie den Systembetrieb anzeigen, Probleme beheben und Leistungsanalysen durchführen. Bei großen Systemen ist die Anzahl der Protokolle oft sehr groß. Die effiziente Aggregation und Zählung von Protokollen ist für das Betriebs- und Wartungspersonal zu einer Herausforderung geworden. In Linux-Systemen können wir Befehlszeilentools für die Protokollaggregation und Statistiken verwenden. Im Folgenden werden einige häufig verwendete Befehlszeilen vorgestellt

Ein erster Blick auf Django: Erstellen Sie Ihr erstes Django-Projekt über die Befehlszeile Ein erster Blick auf Django: Erstellen Sie Ihr erstes Django-Projekt über die Befehlszeile Feb 19, 2024 am 09:56 AM

Beginnen Sie die Reise des Django-Projekts: Beginnen Sie von der Befehlszeile aus und erstellen Sie Ihr erstes Django-Projekt. Django ist ein leistungsstarkes und flexibles Webanwendungs-Framework. Es basiert auf Python und bietet viele Tools und Funktionen, die zum Entwickeln von Webanwendungen erforderlich sind. In diesem Artikel erfahren Sie, wie Sie Ihr erstes Django-Projekt über die Befehlszeile erstellen. Stellen Sie vor dem Start sicher, dass Python und Django installiert sind. Schritt 1: Erstellen Sie das Projektverzeichnis. Öffnen Sie zunächst das Befehlszeilenfenster und erstellen Sie ein neues Verzeichnis

Wie man mit MySQL und C++ ein befehlszeilenbasiertes Bibliotheksverwaltungssystem entwickelt Wie man mit MySQL und C++ ein befehlszeilenbasiertes Bibliotheksverwaltungssystem entwickelt Sep 20, 2023 pm 01:48 PM

Zusammenfassung der Verwendung von MySQL und C++ zur Entwicklung eines befehlszeilenbasierten Bibliotheksverwaltungssystems: In diesem Artikel stellen wir vor, wie Sie MySQL und C++ zur Entwicklung eines einfachen befehlszeilenbasierten Bibliotheksverwaltungssystems verwenden. Wir werden den gesamten Prozess vom Datenbankentwurf bis zur C++-Codeimplementierung abdecken und spezifische Codebeispiele bereitstellen. Einleitung: Ein Bibliotheksverwaltungssystem ist eine gängige Anwendung zur Verwaltung einer Bibliothek oder einer persönlichen Buchsammlung. Durch die Verwendung von MySQL als Datenbank und C++ als Programmiersprache können wir die Implementierung problemlos durchführen

See all articles