SQL参数化查询的另一个理由 命中执行计划
为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间
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注入,还可以提高缓存中执行计划使用次数。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Bagi mereka yang tidak biasa, Mod Kuasa Rendah mengurangkan penggunaan tenaga Mac anda, mungkin memanjangkan hayat bateri dengan mengorbankan prestasi buat sementara waktu, tetapi ia dikendalikan dengan cukup baik sehingga bagi kebanyakan pengguna, mereka tidak akan menyedari sebarang kemerosotan tertentu. Ini ialah mod yang sangat berguna jika anda seorang pengguna komputer riba Mac yang cuba mendapatkan hayat bateri yang paling mungkin daripada MacBook Pro atau Air anda. Dayakan Mod Kuasa Rendah Mac dari Baris Perintah Dari Terminal, taip rentetan arahan berikut pada mana-mana komputer riba Mac: sudo pmset -a lowpowermode 1 Tekan Enter seperti yang diperlukan oleh sudo dan masukkan kata laluan pentadbir anda untuk mengesahkan.

Ramai rakan yang menggunakan sistem win10 mengalami masalah ini semasa bermain permainan atau memasang sistem Aplikasi tidak boleh dimulakan kerana konfigurasi selari aplikasi tidak betul. Untuk mendapatkan maklumat lanjut, lihat log peristiwa aplikasi atau gunakan alat baris arahan sxstrace.exe. Ini mungkin kerana sistem pengendalian tidak mempunyai kebenaran yang sepadan Mari kita lihat tutorial khusus di bawah. Tutorial menggunakan alat baris arahan sxstrace.exe 1. Masalah ini biasanya berlaku apabila memasang program dan permainan Gesaannya ialah: Aplikasi tidak boleh dimulakan kerana konfigurasi selari aplikasi tidak betul. Untuk mendapatkan maklumat lanjut, lihat log peristiwa aplikasi atau gunakan alat baris arahan sxstrace.exe. 2. Mula →

Dengan aplikasi sistem pengendalian Linux yang meluas, semakin ramai orang mula perlu mempelajari dan memahami arahan asas dan pintasan dalam sistem Linux. Dalam artikel ini, kami akan memperkenalkan beberapa arahan dan pintasan Linux yang biasa digunakan untuk membantu pemula memahami sistem Linux dan meningkatkan kecekapan kerja. Arahan yang biasa digunakan Arahan 1.1ls Arahan ls ialah salah satu daripada arahan yang paling biasa digunakan dalam Linux. Ia digunakan terutamanya untuk menyenaraikan fail dan subdirektori dalam direktori semasa. Pilihan yang biasa digunakan ialah: -l: Paparkan maklumat fail dalam format panjang, termasuk jenis fail

Artikel ini memperincikan langkah-langkah untuk menaik taraf Ubuntu 20.04 kepada 22.04. Bagi pengguna yang menggunakan Ubuntu 20.04, mereka telah terlepas ciri dan kelebihan baharu yang dibawa oleh versi 22.04. Untuk mendapatkan pengalaman dan keselamatan yang lebih baik, adalah disyorkan untuk menaik taraf kepada versi Ubuntu yang lebih baharu tepat pada masanya. Ubuntu22.04 diberi nama kod "Jamie Jellyfish", mari kita terokai cara mendapatkan versi LTS terkini! Cara menaik taraf Ubuntu 20.04 kepada 22.04 melalui baris arahan Menguasai baris arahan akan memberi anda kelebihan. Walaupun mungkin untuk mengemas kini Ubuntu melalui GUI, tumpuan kami adalah melalui baris arahan. Mula-mula, mari kita semak versi Ubuntu yang sedang berjalan menggunakan arahan berikut: $

Dalam Python, parameter boleh dihantar ke skrip melalui baris arahan. Parameter ini boleh digunakan di dalam skrip untuk melakukan tindakan yang berbeza berdasarkan input yang berbeza. Penjelasan terperinci tentang parameter baris arahan Python: 1. Parameter kedudukan: parameter yang dihantar ke skrip mengikut urutan pada baris arahan Mereka boleh diakses melalui kedudukan dalam skrip 2. Pilihan baris arahan: parameter bermula dengan - atau -, biasanya Digunakan untuk menentukan pilihan atau bendera khusus untuk skrip; 3. Lulus nilai parameter: Lulus nilai parameter melalui baris arahan.

Mulakan perjalanan projek Django: mulakan dari baris arahan dan cipta projek Django pertama anda Django ialah rangka kerja aplikasi web yang berkuasa dan fleksibel Ia berdasarkan Python dan menyediakan banyak alat dan fungsi yang diperlukan untuk membangunkan aplikasi web. Artikel ini akan membawa anda untuk mencipta projek Django pertama anda bermula dari baris arahan. Sebelum memulakan, pastikan anda memasang Python dan Django. Langkah 1: Cipta direktori projek Mula-mula, buka tetingkap baris arahan dan buat direktori baharu

Ringkasan cara menggunakan MySQL dan C++ untuk membangunkan sistem pengurusan perpustakaan berasaskan baris arahan: Dalam artikel ini, kami akan memperkenalkan cara menggunakan MySQL dan C++ untuk membangunkan sistem pengurusan perpustakaan berasaskan baris arahan yang mudah. Kami akan merangkumi keseluruhan proses daripada reka bentuk pangkalan data kepada pelaksanaan kod C++, dan menyediakan contoh kod khusus. Pengenalan: Sistem pengurusan perpustakaan ialah aplikasi biasa yang digunakan untuk menguruskan perpustakaan atau koleksi buku peribadi. Dengan menggunakan MySQL sebagai pangkalan data dan C++ sebagai bahasa pengaturcaraan, kita boleh melaksanakan dengan mudah

Penyelesaian kepada masalah bahawa javac bukan perintah dalaman atau luaran dan bukan program yang boleh dikendalikan: 1. Pertama, muat turun versi terkini JDK dari tapak web rasmi dan pasangkannya 2. Konfigurasikan pembolehubah persekitaran sistem dan tambah pemasangan jdk laluan ke laluan; 3. Masukkan arahan komputer Jalankan antara muka, masukkan "java -v" dan nombor versi akan muncul.
