我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL常见优化方案是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL常见优化方案是什么

MySQL常见优化方案是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

sql优化的几个地方

select [字段 优化1]:主要是覆盖索引
from []
where [条件 优化2]
union [联合查询 优化3]
新建表格

CREATE TABLE `student` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `name` varchar(50) DEFAULT NULL COMMENT '姓名',  `age` int(11) DEFAULT NULL COMMENT '年龄',  `phone` varchar(12) DEFAULT NULL,  `create_time` datetime DEFAULT NULL COMMENT '创建时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

添加索引,添加索引之后

key_len:根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段是否都被查询用到。

key_len计算方式简单介绍

latin1占用1个字节,gbk占用2个字节,utf8占用3个字节

不允许为空:

varchar(10):10*3

char(10):10*3+2

int:4

允许为空:

varchar(10):10*3+1

char(10):10*3+2+1

int:4+1

使用完全索引key_len=name(50*3+2+1=153)+age(4+1)+phone(12*3+2+1=39)

alter table studen add index name_age_phone(name, age, phone);

添加数据

insert into student(name,age,phone,create_time) values('赛文',1000,'15717177664',now());insert into student(name,age,phone,create_time) values('雷欧',1200,'15733337664',now());insert into student(name,age,phone,create_time) values('泰罗',800,'15714447664',now());

一、优化点1:字段优化

覆盖索引尽量用

简单解释解释,索引是哪几个列,就查询哪几个列: 覆盖索引的原因:索引是高效找到行的一个方法,但是一般数据库也能使用 索引找到一个列的数据,因此它 不必读取整个行。毕竟索引叶子节点存储了它们索引的数据; 当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引 包含了(或 覆盖了)满足查询结果的数据就叫做覆盖索引 注意:有索引尽量不要使用select *

#未覆盖索引EXPLAIN SELECT * FROM student WHERE NAME = '泰罗' and age =1000 and phone='15717177664';#覆盖了索引EXPLAIN SELECT name,age,phone FROM student WHERE NAME = '泰罗' and age =1000 and phone='15717177664';#包含了索引EXPLAIN SELECT name FROM student WHERE NAME = '泰罗' and age =1000 and phone='15717177664';#加上主键也还是覆盖索引EXPLAIN SELECT id, name,age,phone FROM student WHERE NAME = '泰罗' and age =1000 and phone='15717177664';

未使用覆盖索引

MySQL常见优化方案是什么

使用完全覆盖索引

MySQL常见优化方案是什么

使用包含覆盖索引

MySQL常见优化方案是什么

加上主键还是覆盖索引

MySQL常见优化方案是什么

二、优化点2:where优化

1.尽量全值匹配

EXPLAIN SELECT * FROM student WHERE NAME = '赛文';EXPLAIN SELECT * FROM student WHERE NAME = '雷欧' AND age = 1200;EXPLAIN SELECT * FROM student WHERE NAME = '泰罗' AND age = 800 AND phone = '15714447664';

执行结果,三个都用到了索引,但是key_len是不同的,key_len=197,表示所有索引都使用到了

MySQL常见优化方案是什么

当建立了索引列后,能在 wherel 条件中使用索引的尽量所用。

2.最佳左前缀法则

最左前缀法则:指的是查询从索引的最左前列开始并且不跳过索引中的列。 我们定义的索引顺序是 name_age_phone ,所以查询的时候也应该从name开始,然后age,然后phone 情况1:从age、phone开始查询,tpye=All,key = null,没使用索引

MySQL常见优化方案是什么

情况2:从phone开始查询,type=All,key=null,未使用索引

MySQL常见优化方案是什么

情况3:从name开始,type=ref,使用了索引

MySQL常见优化方案是什么

3.范围条件放最后

没有使用范围查询,key_len=197,使用到了name+age+phone组合索引

EXPLAIN SELECT * FROM student WHERE NAME = '泰罗' AND age = 1000 AND phone = '15717177664';

MySQL常见优化方案是什么

使用了范围查询,key_len从197变为158,即除了name和age,phone索引失效了

EXPLAIN SELECT * FROM student WHERE NAME = '泰罗' AND age > 800 AND phone = '15717177664';

key_len=name(153)+age(5)

MySQL常见优化方案是什么

4.不在索引列上做任何操作

EXPLAIN SELECT * FROM student WHERE NAME = '泰罗';EXPLAIN SELECT * FROM student WHERE left(NAME,1) = '泰罗';

不做计算,key_len有值,key_len=153,有使用name索引

MySQL常见优化方案是什么

做了截取结算,type=All,key_len=null,未使用索引

MySQL常见优化方案是什么

5.不等于要甚用

mysql 在使用不等于 (!= 或者 <>) 的时候无法使用索引会导致全表扫描

#有使用到索引EXPLAIN SELECT * FROM student WHERE NAME = '泰罗';#不等于查询,未使用到索引EXPLAIN SELECT * FROM student WHERE NAME != '泰罗';EXPLAIN SELECT * FROM student WHERE NAME <> '泰罗'; #如果定要需要使用不等于,请用覆盖索引EXPLAIN SELECT name,age,phone FROM student WHERE NAME != '泰罗';EXPLAIN SELECT name,age,phone FROM student WHERE NAME <> '泰罗';

使用不等于查询,跳过索引

MySQL常见优化方案是什么

使用不等于查询,同时使用覆盖索引,此时可以使用到索引

MySQL常见优化方案是什么

6.Null/Not null有影响

修改为非空

MySQL常见优化方案是什么

那么为not null,此时导致索引失效

EXPLAIN select * from student where name is null;EXPLAIN select * from student where name is not null;

MySQL常见优化方案是什么

MySQL常见优化方案是什么

改为可以为空

MySQL常见优化方案是什么

查询为空,索引起作用了

MySQL常见优化方案是什么

查询非空索引失效

MySQL常见优化方案是什么

解决方法:

使用覆盖索引(覆盖索引解千愁)

MySQL常见优化方案是什么

7、Like 查询要当心 like

以通配符开头 ('%abc...')mysql 索引失效会变成全表扫描的操作

#like 以通配符开头('%abc...')mysql 索引失效会变成全表扫描的操作#索引有效EXPLAIN select * from student where name ='泰罗';#索引失效EXPLAIN select * from student where name like '%泰罗%';#索引失效EXPLAIN select * from student where name like '%泰罗';#索引有效EXPLAIN select * from student where name like '泰罗%'; 解决方式:覆盖索引EXPLAIN select name,age,phone from student where name like '%泰罗%';

MySQL常见优化方案是什么

MySQL常见优化方案是什么

MySQL常见优化方案是什么

MySQL常见优化方案是什么

使用覆盖索引能够解决

MySQL常见优化方案是什么

8.字符类型加引号

字符串不加单引号索引失效(这个看着有点鸡肋了,一般查询字符串都会加上引号)

MySQL常见优化方案是什么

使用覆盖索引解决

MySQL常见优化方案是什么

三、优化3

1.OR 改 UNION 效率高

未使用索引EXPLAIN select * from student where name='泰罗' or name = '雷欧'; 使用索引EXPLAINselect * from student where name='泰罗'UNIONselect * from student where name = '雷欧'; 解决方式:覆盖索引EXPLAIN select name,age from student where name='泰罗' or name = '雷欧';

使用or未使用到索引

MySQL常见优化方案是什么

使用union,使用了索引

MySQL常见优化方案是什么

解决方式:覆盖索引

MySQL常见优化方案是什么

看完上述内容,你们掌握MySQL常见优化方案是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL常见优化方案是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL常见优化方案是什么

MySQL常见优化方案是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。sql优化的几个地方select [字段 优化1]:主要是覆盖索引from []where [条件 优
2023-06-26

PHP 性能优化:常见陷阱与解决方案

常见的 php 性能陷阱包括:未优化的数据库查询、内存泄露、瓶颈代码、过度序列化、未利用缓存、代码可读性差以及缺乏监控和警报。解决方案包括:优化查询、避免内存泄露、优化瓶颈代码、使用替代方案代替序列化、启用缓存、提高代码可读性以及设置监控和
PHP 性能优化:常见陷阱与解决方案
2024-05-10

C++中常见的编译优化问题解决方案

C++中常见的编译优化问题解决方案摘要:在使用C++编写程序时,我们经常会遇到一些性能瓶颈,影响程序的运行效率。为了提高代码的执行效率,我们可以使用编译器进行优化。本文将介绍一些常见的编译优化问题及其解决方案,并给出具体的代码示例。一、循环
2023-10-22

Mysql常见的慢查询优化方式总结

目录前言(1)数据库中设置SQL慢查询(2)分析慢查询日志 (3)常见的慢查询优化总结前言这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。在公司实习的时候,导师分配了SQL慢查询优化的任务,任务是这样的
2023-05-05

mysql oom优化的方法是什么

OOM(Out of Memory)是指MySQL在执行过程中耗尽了服务器的内存资源,导致MySQL服务异常退出。为了解决OOM问题,可以尝试以下优化方法:调整MySQL的配置参数,如innodb_buffer_pool_size、inno
mysql oom优化的方法是什么
2024-04-12

C++ 函数性能优化的常见误区及解决方案?

常见 c++++ 函数性能优化误区包括:过度使用内联,解决方案:仅对小型、频繁调用的函数使用内联。忽略参数传递,解决方案:考虑使用引用或指针传递大型对象。未使用适当的数据结构,解决方案:选择专门为特定任务设计的合适数据结构。过度使用调用异常
C++ 函数性能优化的常见误区及解决方案?
2024-04-23

PHP开发中常见的性能问题及其优化方案

php性能问题及优化方案:web服务器配置错误:禁用不必要的模块、启用http压缩、使用cdn。数据库查询慢:优化查询(使用索引、限制返回结果)、使用连接池、监控查询执行时间。网络延迟:优化dns查找、使用cdn减少延迟。代码(前端):使用
PHP开发中常见的性能问题及其优化方案
2024-05-10

mysql排序优化的方法是什么

MySQL排序优化的方法有以下几种:索引优化:为排序的列创建索引,可以大幅提高排序的效率。可以考虑创建单列索引、组合索引或者覆盖索引来优化排序操作。排序字段选择:尽量选择较短的排序字段,可以减少排序操作的时间。如果排序字段较长,可以考虑使用
mysql排序优化的方法是什么
2024-04-09

mysql优化查询的方法是什么

MySQL 优化查询的方法包括但不限于以下几点:使用合适的索引:在查询中使用适当的索引可以大大提高查询性能。确保表中的字段有适当的索引可以加快查询速度。优化查询语句:使用合适的查询语句可以减少查询时间。避免使用 SELECT * 查询所有
mysql优化查询的方法是什么
2024-04-23

mysql自动优化的方法是什么

MySQL自动优化的方法主要包括使用MySQL的自动优化器和执行自动优化工具。MySQL的自动优化器:MySQL自带了一个优化器,它可以根据表的统计信息和查询的情况自动选择最优的执行计划。执行自动优化工具:有一些第三方工具可以帮助MySQL
mysql自动优化的方法是什么
2024-04-22

mysql中find_in_set优化的方法是什么

在MySQL中,可以通过使用适当的索引来优化FIND_IN_SET()函数的性能。FIND_IN_SET()函数用于在逗号分隔的字符串中查找指定的值。默认情况下,它是非确定性的,这意味着MySQL不能使用索引进行优化。但是,如果你在列上创
mysql中find_in_set优化的方法是什么
2024-04-09

MySQL索引优化的方法是什么

MySQL索引优化的方法有以下几种:选择合适的列创建索引:根据查询的列和条件,选择最经常使用的列创建索引,以提高查询的效率。组合多列创建索引:如果查询中经常涉及到多个列的条件,可以使用组合索引来提高查询效率。对长文本字段和二进制字段进行前缀
MySQL索引优化的方法是什么
2024-04-09

mysql中常见的约束是什么

这篇文章主要为大家展示了“mysql中常见的约束是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中常见的约束是什么”这篇文章吧。常见约束1、NOT NULL:非空,该字段的值必填2
2023-06-20

编程热搜

目录