系列十二、索引实战

2023-12-19

一、索引实战

1.1、前置说明

前边的系列文章中是基于Linux中的MySQL进行案例演示的,为了后续测试百万条数据的sql性能分析,接下来的案例将会在Windows的MySQL中进行演示,MySQL版本要求需在8.0以上,我的MySQL版本信息如下:

1.2、数据初始化

链接:https://pan.baidu.com/s/1TGLDb9awudyjhZDcu0HNfQ?pwd=yyds 
提取码:yyds 

百万数据初始化:

前置说明

-- 查询是否开启了加载本地文件(默认没有开启,需要开启才能执行load指令)
show variables like 'local_infile';
-- 开启加载本地文件
set global local_infile=on;
-- 执行load指令(依次执行tb_sku1、tb_sku2、...tb_sku5,执行一个脚本差不多耗费100s,耐心等待即可!)
load data local infile 'D:/temp/tb_sku1.sql' into table `tb_sku` fields terminated by ',' lines terminated by '\n';

1.3、案例

创建索引:

(1)name字段为姓名字段,该字段的值可能会重复,为该字段创建普通索引;

create index idx_user_name on user(name);

(2)phone字段为手机号码,非空且唯一,为该字段创建唯一索引

create unique index idx_user_phone on user(phone);

(3)为profession、age、status字段创建联合索引;

create index idx_user_profession_age_status on user(profession,age,status);

(4)为email字段建立普通索引

create index idx_user_email on user(email);

查看索引: 查看user表中所有的索引数据;

show index from user;

1.4、SQL性能分析

1.4.1、SQL执行频率

概述:

MySQL客户端连接成功后,通过show [session|global] status 命令可以查询服务器的状态信息,通过如下指令可以查看当前数据库的insert、update、delete、select的访问频次。

查看当前数据库以哪种业务为主:

show session status like 'Com_______';

通过上述指令的执行结果,可以分析出当前业务是以查询为主还是以增删改为主,从而为数据库的优化提供参考依据,如果是以增删改为主,就可以考虑不对其进行索引优化了,如果是以查询为主,那么就要考虑对索引进行优化了。

说明:

Com_insert:插入次数

Com_update:更新次数

Com_delete:删除次数

Com_select:查询次数

1.4.2、慢查询日志

概述:

慢查询日志记录了执行时间超过指定参数(long_query_time,单位:秒)的所有SQL语句的日志。MySQL默认的慢查询日志没有开启,我们可以看一下系统变量中该参数对应的值是什么:

(1)查看慢SQL配置:show variables like '%slow_query_log%';

(2)开启慢SQL配置: Windows ===> my.ini、Linux ===> /etc/my.cnf

添加如下内容:

# 开启MySQL慢查询日志开关
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

(3)重启MySQL

(4)执行如下sql,观察耗时情况

(5)观察慢sql日志中的信息

通过日志可以清晰的看出,哪些sql超时了,从而定位出效率低下的sql,进行针对性的优化;

1.4.3、profiles详情

概述:

profiles详情用于帮助开发者定位sql执行的消耗时间都花在哪里了。

(1)查看当前mysql是否支持profile操作

select @@having_profiling;

说明:YES表示当前数据库支持profile操作。

(2)查看是否开启了profile支持

说明:1表示已经开启了profile支持,如果没有开启,可以通过如下指令进行开启:

set [session|global] profiling = 1;

(3)开关已经开启了,接下来我们执行的查询操作都将被记录下来;

select * from user;
select * from user where id = 1;
select * from user where name = '吕布';
select * from user where name = '吕不韦';
select count(*) from tb_sku;

(4)profile指令

-- 查看每一条sql的耗时情况
show profiles;

-- 查看指定sql的耗时情况
show profile for query 68;

-- 查看指定query_id的sql语句的CPU使用情况
show profile cpu for query 103;

1.4.4、explain

概述:

explain或者desc命令,用于获取MySQL是如何执行select语句的,包括select语句执行过程中表是如何连接以及连接顺序的。

语法:直接在select语句前加上explain或者desc指令即可。

例如:explain select * from user;

explain各字段的含义解释:

1.5、索引使用

1.5.1、验证索引效率

本系列文章前边使用了大面积篇幅介绍了索引的基本知识,那么索引它真的能够提升查询效率吗?以及它是如何提升查询效率的?带着这个疑问,我们先测试下相同的sql语句,在不使用索引和使用索引的情况下,查询效率有什么变化,通过对比即可知道索引对查询效率的影响。

先看一下表结构:

按照id查询,获得sn: select * from tb_sku where id = 1;

未建立索引的情况(根据sn查询): select * from tb_sku where sn = '100000003145001';

sn字段建立索引后,再次查询:

create index idx_tb_sku_sn on tb_sku(sn);

select * from tb_sku where sn = '100000003145001';

结果分析

(1)通过索引可以极大地提高查询效率(提高了 16.261 / 0.035 = 464.6倍!);

(2)大数据量情况下,建立索引是一个非常耗时的操作;

1.5.2、最左前缀法则

概述:

如果一个表中存在联合索引,那么查询的字段包含联合索引对应的字段时,要遵循最左前缀法则。所谓最左前缀法则值得是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。先来回顾一下user表中之前建立的索引情况:

在user表中存在一个联合索引idx_user_profession_age_status,这个索引涉及到3个字段,顺序分别为:profession、age、status。对于最左前缀法则,查询时最左边的列,也就是profession必须存在,否则索引全部失效,而且中间不能跳过某一列,否则该列后面的字段索引将失效,接下来用一组案例验证一下我们的结论:

索引有效案例:

(1)explain select * from user where profession = '软件工程' and age = 31 and status = '0';

(2)explain select * from user where profession = '软件工程' and age = 31;

(3)explain select * from user where profession = '软件工程';

结果分析:

通过上述三组的演示,可以发现只要联合索引最左边的字段profession字段存在,索引就会生效,只不过索引的长度不同罢了,并且经过以上三组测试,也可以得出如下结论:

profession索引的长度为:47

age索引的长度为:2

status索引的长度为:5

索引失效案例:

(1)explain select * from user where age = 31 and status = '0';

(2)explain select * from user where status = '0';

结果分析:

通过上述两组的测试结果,可以看到索引并未生效,原因是不满足最左前缀法则,联合索引最左边的列profession不存在。

再来看几组测试:

(1)explain select * from user where profession = '软件工程' and  status = '0';

(2) explain select * from user where status = '0' and profession = '软件工程';

结果分析:

通过上述两组的测试结果,可以知道由于profession字段存在,满足最左前缀法则,所以索引是生效的,但是查询时忽略了age这个字段,导致age和status字段对应的索引失效,也就是索引部分失效,另外对比(1)和(2),也可以得出结论:where后边的查询条件不一定非要按照联合索引的字段顺序写,只要满足最左前缀法则即可。

思考题:当执行 explain select * from user where age = 31 and status = '0' and profession = '软件工程';时,是否满足最左前缀法则,走不走上述的联合索引,索引长度?

答:走,索引长度为54。

注意事项:最左前缀法则指的是联合索引中最左边的列,在查询时必须存在,与我们编写sql时,条件的编写顺序无关;

1.5.3、范围查询

先说一组结论,然后再使用案例进行验证。 结论:

(一)联合索引中,出现范围查询(>,<)时,范围右侧的列索引将失效;

(二)联合索引中,出现范围查询(>=,<=)时,索引不会失效;

验证一:

explain select * from user where profession = '软件工程' and age > 30 and status = '0';

验证二:

explain select * from user where profession = '软件工程' and age >= 30 and status = '0';

小总结:

当表中存在联合索引时,如果想使用范围查询,而又不想让联合索引失效,尽量使用 >= 或者 <=,而避免使用 > 或者 < !!!

1.5.4、索引失效

除了上述演示的索引失效外,还有其他场景的索引失效,下面为大家一 一演示:

先看一下当前user表中的索引情况:

(一)索引列运算

结论:不要在索引列上进行运算操作, 否则索引将失效!!!

(二)字符串不加引号

结论: 字符串类型字段使用时,不加引号,虽然查询结果一致,但是由于数据库存在隐式类型转换,将会导致索引将失效!!!

(三)模糊查询

结论:如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引将失效!!!

(四)or连接条件

age字段建立索引后,再次执行上述查询语句;

create index idx_user_age on user(age);

结论: 当or连接的条件,左右两侧字段都有索引时,索引才会生效!!!

(五)数据分布影响

如果 MySQL 评估使用索引比全表更慢,则不使用索引。

结论:

通过上述测试我们发现,相同的SQL语句,只是传入的字段值不同,最终的执行计划也完全不一样,这是为什么呢? 就是因为MySQL在查询时,会评估使用索引的效率与走全表扫描的效率,如果走全表扫描更快,则放弃索引走全表扫描。 因为索引是用来索引少量数据的,如果通过索引查询返回大批量的数据,则还不如走全表扫描来的快,此时索引就会失效!!!

(六) is null 与 is not null

查询时MySQL 会评估,走索引快,还是全表扫描快,如果全表扫描更快,则放弃索引走全表扫描。 因此,is null is not null 是否走索引,得具体情况具体分析,并不是固定的。

1.6、SQL提示

1.6.1、数据初始化

当前user表的数据情况和索引情况如下:

删除idx_user_age和idx_user_email索引:

1.6.2、案例

(一) explain select * from user where profession = ' 软件工程 ';

结果: 查询走了联合索引

(二)创建profession的单例索引后再次查询 :create index idx_user_profession on user(profession);

结果:

我们可以看到,possible_keys中idx_user_profession_age_status,idx_user_profession这两个索引都可能用到,但是最终MySQL选择了idx_user_profession_age_status索引。这是MySQL自动选择的结果。 那么,我们能不能在查询的时候,自己来指定使用哪个索引呢? 答案是肯定的,此时就可以借助于 MySQL SQL 提示来完成。 接下来介绍一下 SQL 提示:

1.6.3、SQL提示

概述:

SQL提示,是优化数据库的一个重要手段,简单来说,就是在 SQL 语句中加入一些人为的提示来达到优化操作的目的。常见命令如下:

(一)use index

指令解释: 建议MySQL使用哪一个索引来完成此次查询(注意:仅仅是建议,MySQL内部还是会再次评估);

案例: explain select * from user use index(idx_user_profession) where profession = '软件工程';

(二)ignore index

指令解释: 忽略指定的索引

案例: explain select * from user ignore index(idx_user_profession) where profession = '软件工程';

(三) force index

指令解释: 强制使用索引

案例: explain select * from user force index(idx_user_profession) where profession = '软件工程';

1.7、覆盖索引

1.7.1、概述

尽量使用覆盖索引,减少select *的使用 。 那么什么是覆盖索引呢? 所谓覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

1.7.2、案例

执行如下sql:

explain select id, profession from user where profession = '软件工程' and age =31 and status = '0' ;

explain select id,profession,age, status from user where profession = '软件工程'and age = 31 and status = '0' ;

explain select id,profession,age, status, name from user where profession = '软件工程' and age = 31 and status = '0' ;

explain select * from user where profession = '软件工程' and age = 31 and status= '0';

结果分析:

从上述的执行计划我们可以看到,这四条SQL 语句的执行计划前面所有的指标都是一样的,看不出来差 异。但是此时,我们主要关注的是后面的Extra ,前面两条 SQL 的结果为 Using where; Using Index ; 而后面两条 SQL 的结果为 : Using index condition,那么它们的区别是什么?请看下图:

因为,在user表中有一个联合索引idx_user_profession_age_status,该索引关联了三个字段profession、 age status ,而这个索引也是一个二级索引,所以叶子节点下面挂的是这一行的主键id 。 所以当我们查询返回的数据在 id profession age status 之中,则直接走二级索引直接返回数据了。 如果超出这个范围,就需要拿到主键id,再去扫描聚集索引,再获取额外的数据了,这个过程就是回表。 而我们如果一直使用 select * 查询返回所有字段值,很容易就会造成回表查询(除非是根据主键查询,此时只会扫描聚集索引)。
为了大家更清楚的理解,什么是覆盖索引,什么是回表查询,我们一起再来看下面的这组SQL 的执行过程。

表结构示意图:

id 是主键,是一个聚集索引。 name 字段建立了普通索引,是一个二级索引(辅助索引)。
(一)执行 SQL : select * from user where id = 2;
根据 id 查询所有,直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。
(二)执行 SQL selet id,name from tb_user where name = 'Arm';
虽然是根据name 字段进行查询二级索引,但是由于查询返回的字段为 id和 name ,在 name 的二级索引中,这两个值都是可以直接获取到的,因为覆盖索引,所以不需要回表查询,性能高。
(三)执行 SQL selet id,name,gender from tb_user where name = 'Arm';
由于在 name 的二级索引中,不包含 gender ,所以,需要两次索引扫描,也就是需要回表查询,性能相对较差一点。

1.8、前缀索引

1.8.1、概述

当字段类型为字符串(varchar text longtext 等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO , 影响查询效率。此时可以只将字符串的一部分前缀建立索引,这样可以大大节约索引空间,从而提高索引效率。

1.8.2、案例

语法: create index idx_xxxx on table_name(column(n)) ;

需求: 为user表的email字段建立长度为5的索引

create index idx_user_email on user(email(5));

1.8.3、前缀长度

可以根据索引的选择性来决定,所谓选择性是指不重复的索引值(基数)和数据表的记录总数的比值, 索引选择性越高则查询效率越高, 唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。
select count ( distinct email) / count (*) from user ;
select count ( distinct substring(email, 1 , 5 )) / count (*) from user ;

1.8.4、前缀索引的查询流程

1.9、单列索引 & 联合索引

1.9.1、概述

单列索引:即一个索引只包含单个列。
联合索引:即一个索引包含了多个列。
当前user表中的索引情况:
从查询结果可以看出,红色框的为联合索引,紫色框的为单列索引

1.9.2、案例

通过上述的执行计划我们可以看出,在and 连接的两个字段 phone name 上都有单列索引,但是最终mysql只会选择一个索引,也就是说,只能走一个字段的索引,此时是会走回表查询的。

小总结: 在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议建立联合索引,而非单列索引。

如果查询使用的是联合索引,具体的结构示意图如下:

1.10、索引设计原则

(1) 针对于数据量较大,且查询比较频繁的表建立索引。
(2)针对于常作为查询条件( where )、排序( order by )、分组( group by )操作的字段建立索 引。
(3) 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
(4)如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
(5)尽量使用联合索引,减少单列索引查询时,联合索引很多时候可以覆盖索引,节省存储空间, 避免回表,提高查询效率。
(6) 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
(7) 如果索引列不能存储 NULL 值,请在创建表时使用 NOT NULL 约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

系列十二、索引实战 的相关文章

  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • 如何更新 MySQL 数据库中的两列?

    这不起作用 UPDATE customers SET firstname John AND lastname Smith WHERE id 1 用逗号分隔值 AND是一个逻辑运算符 它的位置是WHERE and ON条款 UPDATE cu
  • 在 PHP 中比较字符串的方式与 MySQL 相同

    我将 varchar 存储在 utf8 MySQL 表中并使用 utf8 general ci 排序规则 我在 varchar 上有一个唯一索引 我想在 PHP 中进行字符串比较 这相当于 MySQL 对索引所做的操作 一个具体的例子是 我
  • 纠正mysql创建用户时语法错误

    所以我很常见ERROR 1045 28000 Access denied for user root localhost using password YES mysql错误 我已经尝试了论坛上的所有典型修复 通过 mysql safe 方
  • 如何为 MySQL 和 Postgres 编写不区分大小写的查询?

    我在本地运行 MySQL 数据库进行开发 但部署到使用 Postgres 的 Heroku Heroku 处理几乎所有事情 但我不区分大小写的 Like 语句变得区分大小写 我可以使用 iLike 语句 但我的本地 MySQL 数据库无法处
  • MySql如何通过过滤多列来限制多个数字?

    我想从数据库中获取 4 个不同类别的 50 个问题 我想要 4 个不同类别中每个类别的不同数量的问题 我的结果集必须包含第一类 12 个问题 第二类 20 个问题 第三类 10 个问题和第四类 8 个问题 我的问题表中总共有 50 个问题
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • 如何在 MariaDB 10 中启用大索引?

    在 Debian Jessie 中 我安装了 MariaDB 服务器 10 0 30 并尝试增加最大密钥长度 AFAIU 这取决于配置参数innodb large prefix正在启用 根据docs https mariadb com kb
  • mySQL 返回可能有重复项的随机行

    我正在尝试随机化一定数量的行 但假设数据库中只有 4 行 而我需要获得 6 个随机行 我希望有可能 即使表中有超过 6 行 产生重复的行行 这在 mySQL 中很容易实现吗 我当前的查询是这样的 SELECT FROM winners OR
  • 按 MAX(time) WHERE time <= x 选择最近的 MySQL 行

    我正在选择 MySQL 表的最新条目 SELECT MAX time as most recent userID FROM TableName GROUP BY userID ORDER BY most recent DESC 我的问题是
  • PDO::commit 之后使用 PDOStatement::rowCount 结果?

    在 MySQL 文档中 有一个关于使用的注释mysql affected rows事务提交后 http php net manual en function mysql affected rows php http php net manu
  • 为 Mariadb 安装连接器 C

    所以 我想使用 Mariadb 有一个连接器 C https downloads mariadb org connector c https downloads mariadb org connector c 我该如何安装它 坦白说 它的文
  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • MySQL 子查询返回多行

    我正在执行这个查询 SELECT voterfile county Name voterfile precienct PREC ID voterfile precienct Name COUNT SELECT voterfile voter
  • 在mysql中搜索“SanF”时获取旧金山的记录

    当我搜索 SanF 时获得 San Francisco 记录 SELECT FROM table WHERE col LIKE san Works SELECT FROM table WHERE col LIKE san F Works S
  • 从数据库生成 XML 时出现 PHP 编码错误 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试获取一个简单的 PHP 服
  • 在 MySQL 中分割逗号分隔值

    我正在尝试将字符串中以逗号分隔的 值拆分为多列 样本数据 COL1 COL2 COL3 000002 000003 000042 09 31 51 007 004 007 预期输出 Pno Cno Sno 000002 09 007 000
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐

  • 题解 | #输出某一年的各个月份的天数#

    三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 广西北部湾银行2022年校园招聘 广西北部湾银行股份有限公司2022届校园招聘 看终端大把大把15级的 这个14级是不是终端bg的白菜了 程序员面试六战六捷
  • 图片怎么转PDF?这些方法让pdf转换不降质

    当我们需要在电脑上保存一些重要的图片资料时 我们通常会将其转换成PDF格式 但在这个转换过程中 通常会损害到图片的清晰度 而在某些工作场合中 我们对文件的清晰度要求较高 一张被损坏了清晰度的文件显然无法满足我们的需求 那到底图片转pdf怎么
  • 【数字识别】机器视觉字符识别(含读音)【含Matlab源码 3132期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • 【wrf-python】3个pcolormesh子图绘制

    coding utf 8 导入数据读取和处理的模块 from netCDF4 import Dataset from pathlib import Path import glob import xarray as xr import nu
  • 华为OD机试真题-螺旋数字矩阵-2023年OD统一考试(C卷)

    题目描述 疫情期间 小明隔离在家 百无聊赖 在纸上写数字玩 他发明了一种写法 给出数字 个数n 和 行数m 0 lt n 999 0 lt m 999 从左上角的1开始 按照 顺时针螺旋向内写 方式 依次写出2 3 n 最终形成一个 m行矩
  • GLAD:大气像差与自适应光学

    概述 激光在大气湍流中传输时会拾取大气湍流导致的相位畸变 特别是在长距离传输的激光通信系统中 这种畸变会使传输激光的波前劣化 通过在系统中引入自适应光学系统 可以对激光传输时拾取的低频畸变进行校正 从而显著提升传输激光的Strehl rat
  • 滤光片截止带上尖峰的抑制

    具有很宽截止带的边缘滤光片往往会出现尖峰 1 这些峰值具有较高透射率 并且在光谱范围上很窄 这是由滤光片的核心腔体结构导致的 腔体的存在会稍微扩展特性 因此有时会采用优化或合成工艺来引入它们 峰值随系统任何层的厚度变化而移动 因此它始终存在
  • 【手写数字识别】SVM手写数字识别【含GUI Matlab源码 676期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • thinphp+vue+mysql网上超市购物仓储管理系统_niyfl

    这个系统的设计主要包括前端展示界面和方便管理员互动的后端数据库 要求系统需要良好的数据处理能力 友好的界面和易用的功能 本系统结合现今主流管理系统的功能模块以及设计方式进行分析 使用php语言和vue框架进行开发设计 具体研究内容如下 数据
  • 【手写数字识别】BP神经网络手写数字识别(导图+带面板)【含GUI Matlab源码 320期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • 使用Docker搭建onlyoffice

    前提 省略docker的安装步骤 1拉去onlyoffice镜像 我的是指定版本 docker pull onlyoffice documentserver 7 1 1 2 启动onlyoffice docker run itd name
  • 40V TPHR8504PL N沟道功率MOSFET具有业界领先的低导通电阻特性,有助于提高电源效率

    TPHR8504PL是一种MOSFET 金属氧化物半导体场效应晶体管 它是40 Volt N 沟道MOSFET 由N型沟道和P型衬底构成 而P 沟道MOSFET则由P型沟道和N型衬底构成 TPHR8504PL N 沟道MOSFET的工作原理
  • 用友BIP数智采购,推动阳光采购,规避合规风险

    采购管理是企业价值链管理的核心环节 与企业经营效益密切相关 国有企业的采购工作兼具公共采购和企业采购的双重属性 既关系国有企业的经济效益和发展前景 也关系国有资产的保值增值 阳光采购是国有企业合规化采购的必由之路 国有企业在采购环节融入数智
  • thinkphp+mysql+vue实验室设备报修预约管理系统

    运行环境 phpstudy wamp xammp等 开发语言 php 后端框架 Thinkphp5 前端框架 vue js 服务器 apache 数据库 mysql 数据库工具 Navicat phpmyadmin 本站是一个B S模式系统
  • 【手势识别】深度学习卷积神经网络CNN手势识别(0-9,含识别率)【含Matlab源码 3435期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • 好用的p图软件免费有哪些?帮你个性化修饰你的图片

    在信息时代的今天 很多人都喜欢将自己的所见所闻拍照下来 但是拍下来的照片难免有这样那样的问题 这就需要一款好用的p图软件来对图片进行完善了 但是市面上p图软件众多 有以功能齐全和专业性为特色的 也有以操作简单为特色的 更有些以多样化的特效为
  • 【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • R10在工业自动化-485转WiFi无线路由解决方案

    R10是钡铼技术有限公司研发的一款用于工业自动化应用的485转WiFi无线路由器解决方案 该解决方案可以将传统的RS485通信设备无线化 实现数据的远程监控和管理 下面将详细介绍R10在工业自动化中的应用 首先 R10具备RS485转WiF
  • 西南科技大学数据库实验八(自定义函数)

    一 实验目的 1 掌握用户自定义变量 2 熟悉运算符与表达式 3 掌握begin end语句块 4 掌握重置命令结束标记 5 掌握创建自定义函数的语法格式以及函数的创建与调用 二 实验任务 1 创建学生表Student 由学号 Sno 姓名
  • 系列十二、索引实战

    一 索引实战 1 1 前置说明 前边的系列文章中是基于Linux中的MySQL进行案例演示的 为了后续测试百万条数据的sql性能分析 接下来的案例将会在Windows的MySQL中进行演示 MySQL版本要求需在8 0以上 我的MySQL版