Rumah pangkalan data tutorial mysql sql语句如何优化?

sql语句如何优化?

Apr 08, 2019 am 11:06 AM
sql pengoptimuman

sql语句优化的几种方法有:1、统一SQL语句的格式;2、对查询进行优化,应尽量避免全表扫描;3、SQL语句要简洁;4、考虑使用“临时表”暂存中间结果;5、尽量避免大事务操作;6、尽量避免向客户端返回大数据量。下面本篇文章就来给大家具体介绍一些,希望对大家有所帮助。

sql语句如何优化?

我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。

sql语句优化的几种方法:

1、统一SQL语句的格式

对于以下两句SQL语句,很多人认为是相同的,但是,数据库查询优化器认为是不同的。

 ● select * from dual

 ● select * From dual

虽然只是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!

2、少用 * ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

3、对查询进行优化,应尽量避免全表扫描

1)、应考虑在 where 及 order by 涉及的列上建立索引。

2)、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:    

select id from t where num is null
Salin selepas log masuk

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0
Salin selepas log masuk

3)、应尽量避免在 where 子句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描

4)、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20
Salin selepas log masuk

可以这样查询:

select id from t where num=10    
union all    
select id from t where num=20
Salin selepas log masuk

5)、慎用in 和 not in,否则会导致全表扫描,如:

select id from t where num in(1,2,3)
Salin selepas log masuk

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3
Salin selepas log masuk

6)、合理使用like模糊查询

有的时候会需要进行一些模糊查询比如:

select * from contact where username like ‘%yue%’
Salin selepas log masuk

关键词 %yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%

7)、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100
Salin selepas log masuk

应改为:

select id from t where num=100*2
Salin selepas log masuk

8)、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

查询name以abc开头的id

select id from t where substring(name,1,3)=&#39;abc&#39;
Salin selepas log masuk

应改为:

select id from t where name like &#39;abc%&#39;
Salin selepas log masuk

4、用 exists 代替 in

很多时候用 exists 代替 in 是一个好的选择,Exists只检查存在性,性能比in强很多。例:

select num from a where num in(select num from b)
Salin selepas log masuk

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)
Salin selepas log masuk

5、不要把SQL语句写得太长,太过冗余、要简洁;能用一句千万不要用两句

一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。

另外,执行计划是可以被重用的,越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想而知,数据库的效率会何等低下。

6、考虑使用“临时表”暂存中间结果

简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。

7、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,    否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

8、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。    
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。  

9、尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,    其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。    

10、避免频繁创建和删除临时表,以减少系统表资源的消耗。

11、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

12、尽量避免大事务操作,提高系统并发能力。

13、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

相关视频教程推荐:《MySQL教程

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

Atas ialah kandungan terperinci sql语句如何优化?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara HQL dan SQL dalam rangka kerja Hibernate? Apakah perbezaan antara HQL dan SQL dalam rangka kerja Hibernate? Apr 17, 2024 pm 02:57 PM

HQL dan SQL dibandingkan dalam rangka kerja Hibernate: HQL (1. Sintaks berorientasikan objek, 2. Pertanyaan bebas pangkalan data, 3. Keselamatan jenis), manakala SQL mengendalikan pangkalan data secara langsung (1. Piawaian bebas pangkalan data, 2. Boleh laku kompleks pertanyaan dan manipulasi data).

Penggunaan operasi bahagian dalam Oracle SQL Penggunaan operasi bahagian dalam Oracle SQL Mar 10, 2024 pm 03:06 PM

"Penggunaan Operasi Bahagian dalam OracleSQL" Dalam OracleSQL, operasi bahagi ialah salah satu operasi matematik yang biasa. Semasa pertanyaan dan pemprosesan data, operasi pembahagian boleh membantu kami mengira nisbah antara medan atau memperoleh hubungan logik antara nilai tertentu. Artikel ini akan memperkenalkan penggunaan operasi pembahagian dalam OracleSQL dan memberikan contoh kod khusus. 1. Dua cara operasi bahagi dalam OracleSQL Dalam OracleSQL, operasi bahagi boleh dilakukan dalam dua cara berbeza.

Perbandingan dan perbezaan sintaks SQL antara Oracle dan DB2 Perbandingan dan perbezaan sintaks SQL antara Oracle dan DB2 Mar 11, 2024 pm 12:09 PM

Oracle dan DB2 ialah dua sistem pengurusan pangkalan data hubungan yang biasa digunakan, setiap satunya mempunyai sintaks dan ciri SQL tersendiri. Artikel ini akan membandingkan dan membezakan antara sintaks SQL Oracle dan DB2, dan memberikan contoh kod khusus. Sambungan pangkalan data Dalam Oracle, gunakan pernyataan berikut untuk menyambung ke pangkalan data: CONNECTusername/password@database Dalam DB2, pernyataan untuk menyambung ke pangkalan data adalah seperti berikut: CONNECTTOdataba

Persaingan teknologi pangkalan data: Apakah perbezaan antara Oracle dan SQL? Persaingan teknologi pangkalan data: Apakah perbezaan antara Oracle dan SQL? Mar 09, 2024 am 08:30 AM

Persaingan teknologi pangkalan data: Apakah perbezaan antara Oracle dan SQL? Dalam bidang pangkalan data, Oracle dan SQL Server adalah dua sistem pengurusan pangkalan data hubungan yang sangat dihormati. Walaupun kedua-duanya tergolong dalam kategori pangkalan data hubungan, terdapat banyak perbezaan antara mereka. Dalam artikel ini, kami akan menyelidiki perbezaan antara Oracle dan SQL Server, serta ciri dan kelebihannya dalam aplikasi praktikal. Pertama sekali, terdapat perbezaan dalam sintaks antara Oracle dan SQL Server.

Pengoptimuman program C++: teknik pengurangan kerumitan masa Pengoptimuman program C++: teknik pengurangan kerumitan masa Jun 01, 2024 am 11:19 AM

Kerumitan masa mengukur masa pelaksanaan algoritma berbanding saiz input. Petua untuk mengurangkan kerumitan masa program C++ termasuk: memilih bekas yang sesuai (seperti vektor, senarai) untuk mengoptimumkan storan dan pengurusan data. Gunakan algoritma yang cekap seperti isihan pantas untuk mengurangkan masa pengiraan. Hapuskan berbilang operasi untuk mengurangkan pengiraan berganda. Gunakan cawangan bersyarat untuk mengelakkan pengiraan yang tidak perlu. Optimumkan carian linear dengan menggunakan algoritma yang lebih pantas seperti carian binari.

Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Mar 08, 2024 pm 09:39 PM

Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Dalam medan pangkalan data, Oracle dan SQL adalah dua istilah yang sering disebut. Oracle ialah sistem pengurusan pangkalan data hubungan (RDBMS), dan SQL (StructuredQueryLanguage) ialah bahasa piawai untuk mengurus pangkalan data hubungan. Walaupun mereka agak berkaitan, terdapat beberapa perbezaan yang ketara. Pertama sekali, mengikut definisi, Oracle ialah sistem pengurusan pangkalan data khusus, yang terdiri daripada

Analisis kesan nombor sambungan MySQL terhadap prestasi pangkalan data Analisis kesan nombor sambungan MySQL terhadap prestasi pangkalan data Mar 16, 2024 am 10:09 AM

Analisis Kesan Nombor Sambungan MySQL terhadap Prestasi Pangkalan Data Dengan pembangunan aplikasi Internet yang berterusan, pangkalan data telah menjadi alat penyimpanan dan pengurusan data yang penting untuk menyokong sistem aplikasi. Dalam sistem pangkalan data, bilangan sambungan adalah konsep penting, yang berkaitan secara langsung dengan prestasi dan kestabilan sistem pangkalan data. Artikel ini akan bermula dari perspektif pangkalan data MySQL, meneroka kesan bilangan sambungan pada prestasi pangkalan data, dan menganalisisnya melalui contoh kod tertentu. 1. Berapakah bilangan sambungan? Bilangan sambungan merujuk kepada bilangan sambungan klien yang disokong oleh sistem pangkalan data pada masa yang sama Ia juga boleh diuruskan

Bagaimana untuk mengoptimumkan item permulaan sistem WIN7 Bagaimana untuk mengoptimumkan item permulaan sistem WIN7 Mar 26, 2024 pm 06:20 PM

1. Tekan kombinasi kekunci (kekunci win + R) pada desktop untuk membuka tetingkap jalankan, kemudian masukkan [regedit] dan tekan Enter untuk mengesahkan. 2. Selepas membuka Registry Editor, kami klik untuk mengembangkan [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer], dan kemudian lihat jika terdapat item Serialize dalam direktori Jika tidak, kami boleh klik kanan Explorer, buat item baharu dan namakannya Serialize. 3. Kemudian klik Serialize, kemudian klik kanan ruang kosong dalam anak tetingkap kanan, cipta nilai bit DWORD (32) baharu dan namakannya Bintang

See all articles