SQL优化的方法有很多种,针对平时的情况总结一下几种:

以下用到的表和数据,可以通过这篇文章中的语句添加:

MySQL执行计划explain的详解_蓝星部队的博客-CSDN博客一、如何查看SQL执行计划:在MySQL中生成执行计划的方法很简单,在SQL语句前面加explain既可。explain可以作用于SELECT/INSERT/UPDATE/DELETE和REPLACE语句。二、执行计划输出列解读:当使用explain时,输出中包含的列为:id,select_type,table,type,possible_keys,key,key_len,ref,rows,filtered, Extra1、ID包含一组数字,表示select查询的序列号,标识执行的顺https://blog.csdn.net/lanxingbudui/article/details/116104884?spm=1001.2014.3001.5501

一、有索引而未被用到:

1、Like的参数以通配符%开头时,数据库引擎会放弃使用索引而进行全表扫描。

以通配符开头的sql语句,是全表扫描,没有使用到索引,不建议使用:

explain select * from teacher where tname like '%10';

不以通配符开头的sql语句,使用到了索引,是有范围的查找:

explain select * from teacher where tname like '10%';

2、where条件不符合最左原则:

假设有这样一个索引——(a,b,c),必须用到第一个字段a,才会走索引。否则如select * from table where b='b' and c='c',就不会使用到索引。

关于详细的最左匹配原则可以查看这篇文章:MySQL查询不走索引的原因--最左匹配原则_蓝星部队的博客-CSDN博客查询条件最左以通配符%开始,例如where a like '%xx'查询条件使用IS NULL 或 IS NOT NULL查询条件在字段上进行数据运算或函数运算(包括隐式数据转换)索引列不能参与计算,保持列“干净”查询条件使用负向查询条件:NOT,!=,<>,!<,!>,NOT IN, NOT LIKE 等。https://blog.csdn.net/lanxingbudui/article/details/117063956?spm=1001.2014.3001.5501

3、索引列使用 != 或 <> 操作符时,数据库引擎会放弃使用索引而进行全表扫描。使用>或<会比较高效。

4、在 where 子句中对索引列进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

5、在where子句中对索引列进行null值判断,引擎放弃使用索引而进行全表扫描。

如: 低效:select * from teacher where note is null ;

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

高效:select * from teacher where note= 0;

6、在where子句中使用or来连接条件,导致引擎放弃使用索引而进行全表扫描。

如: 低效:select * from teacher where note = 12 or note = 122;

可以用下面这样的查询代替上面的 or 查询:

高效:select * from teacher where note = 12 union all select * from teacher where note = 122;

或者:select * from teacher where note in (12, 122);

二、避免select *

在解析的过程中,会将 ' * ' 依次转换成表的所有列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。所以,应该养成一个需要什么就取什么的好习惯。

三、order by 语句优化

任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。

方法:

1.重写order by语句以使用索引;

2.为order by所使用的列建立另外一个索引;

3.绝对避免在order by子句中使用表达式。

四、GROUP BY语句优化

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。

--低效:
select c_id, sum(score) from sc where group by c_id having score > 100;--高效:
select c_id, sum(score) from sc where score > 100 group by c_id ;

五、使用 varchar/nvarchar 代替 char/nchar

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

六、能用DISTINCT的就不用GROUP BY

select c_id from sc where score > 100 group by c_id

可改为:

select distinct c_id from sc where score > 100

七、能用UNION ALL就不要用UNION

UNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源。

八、Join表的时候使用相当类型的例,并将其索引

如果应用程序有很多JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。而且,这些被用来Join的字段,应该是相同的类型的。例如:如果你要把 DECIMAL 字段和一个 INT 字段Join在一起,MySQL就无法使用它们的索引。对于那些STRING类型,还需要有相同的字符集才行。(两个表的字符集有可能不一样)

MySQL中常用的SQL优化方法相关推荐

  1. ​MYSQL中常用的SQL语句​(增删改查)

    MYSQL中常用的SQL语句 一.增删改查 1.新增 指定字段插入: INSERT INTO <表名> (<字段1>, <字段2>, <字段3>) VA ...

  2. mysql中常用的sql函数_Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  3. 千万级的mysql数据库与sql优化方法

    http://www.111cn.net/database/110/32932.htm 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应 ...

  4. Mysql的sql优化方法

    Mysql的sql优化方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为了 ...

  5. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  6. mysql 如何优化sql语句,如何优化SQL?MySQL中超实用的SQL语句送给大家

    如何优化SQL?MySQL中超实用的SQL语句送给大家 如何优化SQL?MySQL中超实用的SQL语句送给大家 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据 ...

  7. MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

    MySQl学习(MySQL数据库,从入门到精通:第四篇--MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符 1. 算术运算符 1.加法与减法运算符 2.乘法与除法运算符 ...

  8. MySQL中的limit分页优化

    MySQL中的limit分页优化 MySQL的limit优化 mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,my ...

  9. Mysql中查询速度的优化

    2019独角兽企业重金招聘Python工程师标准>>> mysql中查询速度的优化 1.查看每一个表的数据量 2.left join的时候尽量减少表的大小,通过临时表,查询条件去限制 ...

最新文章

  1. UE5虚幻引擎5中的实时特效学习 Introduction to real time FX in Unreal Engine 5
  2. python 数组队列
  3. 直播服务器简单实现 http_flv和hls 内网直播桌面
  4. 大数据告诉你,中国女人有多勤奋
  5. 如何解决IE6的3像素问题?
  6. JSON和JSONP (含jQuery实例)(share)
  7. (240)FPGA验证工程师岗位技能树
  8. java html转换xml文件,使用Java在HTML中转换XML + XSL
  9. webworker应用场景_初始WebWorker
  10. 怎么做应力应变曲线_常用的应力测试方法及其在船舶系统零部件中的应用
  11. 746. Min Cost Climbing Stairs
  12. 简洁优雅的.net代码赏析
  13. oracle 判断最后一笔_美股道琼斯日线杀跌一笔结束,向上一笔的反弹顺理成章。又到金秋弯腰拾金时...
  14. 线性代数笔记5——平面方程与矩阵
  15. ubuntu22.04安装网易云音乐不能打开的问题
  16. Jenkins ssh 远程启动 nohup
  17. SQL Server阻塞与锁
  18. java生成条码_Java生成商品条形码
  19. HWA是什么?HWA会带来什么影响?和 HiRes,LDAC,L2HC有什么区别?
  20. 今天开始学Convex Optimization:第2章 背景数学知识简述

热门文章

  1. PowerMILL Robot 2017 机器人编程视频教程
  2. setContentView(R.layout.activity_main);一直报错,原来是glide惹得祸
  3. 重构是什么,为什么要重构,怎么重构
  4. 中职计算机教师招聘试题库,职业技术学校教师考试题目
  5. PDF合并软件推荐【绿色免费】
  6. matlab实践作业,matlab高等工程数学作业-实践报告
  7. Java Web项目实战案例一
  8. c语言程序输入中能不能输入中文,如何在C语言中输入中文?
  9. Notepad++显示文件资源管理器
  10. Python爬虫——2.底层操作和请求头、请求代理以及cookie操作