5分钟快速掌握阿里内部MySQL性能优化的核心技术!

SQL 中 JOIN 的执行顺序优化指南 SQL查询中JOIN的执行顺序优化是数据库性能调优的关键。数据库引擎会根据表大小、索引情况、JOIN类型等因素动态确定最优JOIN顺序。优化技巧包括使用STRAIGHT_JOIN强制顺序、更新统计信息、查询提示等。对于复杂多表连接,建议分解查询或使用物化视图。不同数据库的JOIN优化特性各异,需通过EXPLAIN分析执行计划。面试时应重点展示通过具体案例优化JOIN性能的经验。 阅读详情

前言

BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。

SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?

有朋友疑问到,SQL优化真的有这么重要么?如下图所示,SQL优化在提升系统性能中是:(成本最低 && 优化效果最明显) 的途径。如果你的团队在SQL优化这方面搞得很优秀,对你们整个大型系统可用性方面无疑是一个质的跨越,真的能让你们老板省下不止几沓子钱。

优化成本:硬件>系统配置>数据库表结构>SQL及索引。

优化效果:硬件<系统配置<数据库表结构<SQL及索引。

别看了,上面这是一道送命题。

好了我们言归正传,首先,对于MySQL层优化我一般遵从五个原则:

减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO

返回更少的数据:只返回需要的字段和数据分页处理 减少磁盘io及网络io

减少交互次数:批量DML操作,函数存储等减少数据连接次数

减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu 内存占用

利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源

总结到SQL优化中,就三点:

最大化利用索引;

尽可能避免全表扫描;

减少无效数据的查询;

理解SQL优化原理 ,首先要搞清楚SQL执行顺序:

SELECT语句 - 语法顺序:

 

SELECT语句 - 执行顺序:

FROM<表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。

ON<筛选条件> # 对笛卡尔积的虚表进行筛选

JOIN  # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中

WHERE # 对上述虚表进行筛选

GROUP BY<分组条件> # 分组 # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的

HAVING<分组筛选> # 对分组后的结果进行聚合筛选

SELECT<返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外

DISTINCT

ORDER BY<排序条件> # 排序

LIMIT<行数限制>

SQL优化策略

声明:以下SQL优化策略适用于数据量较大的场景下,如果数据量较小,没必要以此为准,以免画蛇添足。

一、避免不走索引的场景

1.尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下:

优化方式:尽量在字段后面使用模糊查询。如下:

如果需求是要在前面使用模糊查询,

使用MySQL内置函数INSTR(str,substr) 来匹配,作用类似于java中的indexOf(),查询字符串出现的角标位置

使用FullText全文索引,用match against 检索

数据量较大的情况,建议引用ElasticSearch、solr,亿级数据量检索速度秒级

当表数据量较少(几千条儿那种),别整花里胡哨的,直接用like '%xx%'。

2.尽量避免使用in 和not in,会导致引擎走全表扫描。如下:

优化方式:如果是连续数值,可以用between代替。如下:

如果是子查询,可以用exists代替。如下:

3.尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描。如下:

优化方式:可以用union代替or。如下:

4.尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。如下:

 

优化方式:可以给字段添加默认值0,对0值进行判断。如下:

5.尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。

可以将表达式、函数操作移动到等号右侧。如下:

6.当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。如下:

优化方式:用代码拼装sql时进行判断,没 where 条件就去掉 where,有where条件就加 and。

7.查询条件不能用 <> 或者 !=

使用索引列作为条件进行查询时,需要避免使用<>或者!=等判断条件。如确实业务需要,使用到不等于符号,需要在重新评估索引建立,避免在此字段上建立索引,改由查询条件中其他索引字段代替。

8.where条件仅包含复合索引非前置列

如下:复合(联合)索引包含key_part1,key_part2,key_part3三列,但SQL语句没有包含索引前置列"key_part1",按照MySQL联合索引的最左匹配原则,不会走联合索引。

9.隐式类型转换造成不使用索引

如下SQL语句由于索引对列类型为varchar,但给定的值为数值,涉及隐式类型转换,造成不能正确走索引。

10.order by 条件要与where中条件一致,否则order by不会利用索引进行排序

对于上面的语句,数据库的处理顺序是:

第一步:根据where条件和统计信息生成执行计划,得到数据。

第二步:将得到的数据排序。当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则重新进行排序操作。

第三步:返回排序后的数据。

当order by 中的字段出现在where条件中时,才会利用索引而不再二次排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作。

这个结论不仅对order by有效,对其他需要排序的操作也有效。比如group by 、union 、distinct等。

11.正确使用hint优化语句

MySQL中可以使用hint指定优化器在执行时选择或忽略特定的索引。一般而言,处于版本变更带来的表结构索引变化,更建议避免使用hint,而是通过Analyze table多收集统计信息。但在特定场合下,指定hint可以排除其他索引干扰而指定更优的执行计划。

USE INDEX 在你查询语句中表名的后面,添加 USE INDEX 来提供希望 MySQL 去参考的索引列表,就可以让 MySQL 不再考虑其他可用的索引。例子: SELECT col1 FROM table USE INDEX (mod_time, name)...

IGNORE INDEX 如果只是单纯的想让 MySQL 忽略一个或者多个索引,可以使用 IGNORE INDEX 作为 Hint。例子: SELECT col1 FROM table IGNORE INDEX (priority) ...

FORCE INDEX 为强制 MySQL 使用一个特定的索引,可在查询中使用FORCE INDEX 作为Hint。例子: SELECT col1 FROM table FORCE INDEX (mod_time) ...

在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是很多时候,数据库系统的查询优化器并不一定总是能使用最优索引。如果我们知道如何选择索引,可以使用FORCE INDEX强制查询使用指定的索引。

例如:

二、SELECT语句其他优化

1.避免出现select*

首先,select * 操作在任何类型数据库中都不是一个好的SQL编写习惯。

使用select * 取出全部列,会让优化器无法完成索引覆盖扫描这类优化,会影响优化器对执行计划的选择,也会增加网络带宽消耗,更会带来额外的I/O,内存和CPU消耗。

建议提出业务实际需要的列数,将指定列名以取代select *。

2.避免出现不确定结果的函数

特定针对主从复制这类业务场景。由于原理上从库复制的是主库执行的语句,使用如now()、rand()、sysdate()、current_user()等不确定结果的函数很容易导致主库与从库相应的数据不一致。另外不确定值的函数,产生的SQL语句无法利用query cache。

3.多表关联查询时,小表在前,大表在后。

在MySQL中,执行 from 后的表关联查询是从左往右执行的(Oracle相反),第一张表会涉及到全表扫描,所以将小表放在前面,先扫小表,扫描快效率较高,在扫描后面的大表,或许只扫描大表的前100行就符合返回条件并return了。

例如:表1有50条数据,表2有30亿条数据;如果全表扫描表2,你品,那就先去吃个饭再说吧是吧。

4.使用表的别名

当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个列名上。这样就可以减少解析的时间并减少哪些友列名歧义引起的语法错误。

5.用where字句替换HAVING字句

避免使用HAVING字句,因为HAVING只会在检索出所有记录之后才对结果集进行过滤,而where则是在聚合前刷选记录,如果能通过where字句限制记录的数目,那就能减少这方面的开销。HAVING中的条件一般用于聚合函数的过滤,除此之外,应该将条件写在where字句中。

where和having的区别:where后面不能使用组函数

6. 调整Where字句中的连接顺序

MySQL采用从左往右,自上而下的顺序解析where子句。根据这个原理,应将过滤数据多的条件往前放,最快速度缩小结果集。

三、增删改 DML 语句优化

1.大批量插入数据

如果同时执行大量的插入,建议使用多个值的INSERT语句(方法二)。这比使用分开INSERT语句快(方法一),一般情况下批量插入效率有几倍的差别。

方法一:

方法二:

选择后一种方法的原因有三。

减少SQL语句解析的操作,MySQL没有类似Oracle的share pool,采用方法二,只需要解析一次就能进行数据的插入操作;

在特定场景可以减少对DB连接次数

SQL语句较短,可以减少网络传输的IO。

2.适当使用commit

适当使用commit可以释放事务占用的资源而减少消耗,commit后能释放的资源如下:

事务占用的undo数据块;

事务在redo log中记录的数据块;

释放事务施加的,减少锁争用影响性能。特别是在需要使用delete删除大量数据的时候,必须分解删除量并定期commit。

3.避免重复查询更新的数据

针对业务中经常出现的更新行同时又希望获得改行信息的需求,MySQL并不支持PostgreSQL那样的UPDATE RETURNING语法,在MySQL中可以通过变量实现。

例如,更新一行记录的时间戳,同时希望查询当前记录中存放的时间戳是什么,简单方法实现:

使用变量,可以重写为以下方式:

前后二者都需要两次网络来回,但使用变量避免了再次访问数据表,特别是当t1表数据量较大时,后者比前者快很多。

4.查询优先还是更新(insert、update、delete)优先

MySQL 还允许改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。

下面我们提到的改变调度策略的方法主要是针对只存在表锁的存储引擎,比如 MyISAM 、MEMROY、MERGE,对于Innodb 存储引擎,语句的执行是由获得行锁的顺序决定的。MySQL 的默认的调度策略可用总结如下:

1)写入操作优先于读取操作。

2)对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。

3)对某张数据表的多个读取操作可以同时地进行。MySQL 提供了几个语句调节符,允许你修改它的调度策略:

LOW_PRIORITY关键字应用于DELETE、INSERT、LOAD DATA、REPLACE和UPDATE;

HIGH_PRIORITY关键字应用于SELECT和INSERT语句;

DELAYED关键字应用于INSERT和REPLACE语句。

如果写入操作是一个 LOW_PRIORITY(低优先级)请求,那么系统就不会认为它的优先级高于读取操作。在这种情况下,如果写入者在等待的时候,第二个读取者到达了,那么就允许第二个读取者插到写入者之前。只有在没有其它的读取者的时候,才允许写入者开始操作。这种调度修改可能存在 LOW_PRIORITY写入操作永远被阻塞的情况。

SELECT 查询的HIGH_PRIORITY(高优先级)关键字也类似。它允许SELECT 插入正在等待的写入操作之前,即使在正常情况下写入操作的优先级更高。另外一种影响是,高优先级的 SELECT 在正常的 SELECT 语句之前执行,因为这些语句会被写入操作阻塞。如果希望所有支持LOW_PRIORITY 选项的语句都默认地按照低优先级来处理,那么 请使用--low-priority-updates 选项来启动服务器。通过使用 INSERTHIGH_PRIORITY 来把 INSERT 语句提高到正常的写入优先级,可以消除该选项对单个INSERT语句的影响。

四、查询条件优化

1.对于复杂的查询,可以使用中间临时表 暂存数据

2.优化group by语句

默认情况下,MySQL 会对GROUP BY分组的所有值进行排序,如 “GROUP BY col1,col2,....;” 查询的方法如同在查询中指定 “ORDER BY col1,col2,...;” 如果显式包括一个包含相同的列的 ORDER BY子句,MySQL 可以毫不减速地对它进行优化,尽管仍然进行排序。

因此,如果查询包括 GROUP BY 但你并不想对分组的值进行排序,你可以指定 ORDER BY NULL禁止排序。例如:

3.优化join语句

MySQL中可以通过子查询来使用 SELECT 语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的 SQL 操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN)..替代。

例子:假设要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

如果使用连接(JOIN).. 来完成这个查询工作,速度将会有所提升。尤其是当 salesinfo表中对 CustomerID 建有索引的话,性能将会更好,查询如下:

连接(JOIN).. 之所以更有效率一些,是因为 MySQL 不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

4.优化union查询

MySQL通过创建并填充临时表的方式来执行union查询。除非确实要消除重复的行,否则建议使用union all。原因在于如果没有all这个关键词,MySQL会给临时表加上distinct选项,这会导致对整个临时表的数据做唯一性校验,这样做的消耗相当高。

高效:

低效:

5.拆分复杂SQL为多个小SQL,避免大事务

简单的SQL容易使用到MySQL的QUERY CACHE;

减少锁表时间特别是使用MyISAM存储引擎的表;

可以使用多核CPU。

6.使用truncate代替delete

当删除全表中记录时,使用delete语句的操作会被记录到undo块中,删除记录也记录binlog,当确认需要删除全表时,会产生很大量的binlog并占用大量的undo数据块,此时既没有很好的效率也占用了大量的资源。

使用truncate替代,不会记录可恢复的信息,数据不能被恢复。也因此使用truncate操作有其极少的资源占用与极快的时间。另外,使用truncate可以回收表的水位,使自增字段值归零。

7.使用合理的分页方式以提高分页效率

使用合理的分页方式以提高分页效率 针对展现等分页需求,合适的分页方式能够提高分页的效率。

案例1:

上述例子通过一次性根据过滤条件取出所有字段进行排序返回。数据访问开销=索引IO+索引全部记录结果对应的表数据IO。因此,该种写法越翻到后面执行效率越差,时间越长,尤其表数据量很大的时候。

适用场景:当中间结果集很小(10000行以下)或者查询条件复杂(指涉及多个不同查询字段或者多表连接)时适用。

案例2:

上述例子必须满足t表主键是id列,且有覆盖索引secondary key:(thread_id, deleted, gmt_create)。通过先根据过滤条件利用覆盖索引取出主键id进行排序,再进行join操作取出其他字段。数据访问开销=索引IO+索引分页后结果(例子中是15行)对应的表数据IO。因此,该写法每次翻页消耗的资源和时间都基本相同,就像翻第一页一样。

适用场景:当查询和排序字段(即where子句和order by子句涉及的字段)有对应覆盖索引时,且中间结果集很大的情况时适用。

五、建表优化

1.在表中建立索引,优先考虑where、order by使用到的字段。

2.尽量使用数字型字段(如性别,男:1 女:2),若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

这是因为引擎在处理查询和连接时会 逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

**3.查询数据量大的表 会造成查询缓慢。**主要的原因是扫描行数过多。这个时候可以通过程序,分段分页进行查询,循环遍历,将结果合并处理进行展示。要查询100000到100050的数据,如下:

4.用varchar/nvarchar 代替 char/nchar

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

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

写在最后

觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

从零开始java数据库SQL优化(一):一篇解决MYSQL查询优化总纲 目录 目录 一:问题场景 二:优化 1.查询计划 2.分析计划 连接类型 三:索引的使用与选择 1.索引的使用以及优化 (1) MYSQL中的索引原理 (2) 4中树结构在索引中的应用(附红黑树) 2、树结构选择合适的索引。 3、mysql中建立索引的规范 4、mysql的索引分类以及使用场景 (1)索引的总分类 (2)Mysql中的索引 (3)、建立合适索引... 阅读详情

相关推荐

阿里云DTS数据迁移实战:MySQL 8.0到PolarDB MySQL 5分钟切换(附配置清单)

本文详细介绍了使用阿里云DTS实现MySQL 8.0到PolarDB MySQL的零停机迁移全流程,包括迁移前的关键准备、DTS任务配置、预检查与问题排查、迁移进度监控、切换验证及迁移后优化。通过实战指南和配置清单,帮助用户高效完成数据库迁移,确保业务连续性。

weixin_30598225的博客 393

聊聊sql优化的15个小技巧

前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的改造成本相对于代码来说也要小得多。 那么,如何优化sql语句呢? ​ 我的个人技术博客:https://susan.net.cn​​​​​​​ ​ 这篇文章从15个方面,分享了sql优化的一些小技巧,希望对你有所帮助。 最近无意间获得一份BAT大厂大佬写的刷题笔记,一下子打通了我的任督二脉,越来越觉得算法没

9687

Java 数据库性能优化:SQL 查询的 10 个关键点

在 Java 开发中,数据库操作是必不可少的一环。然而,随着数据量的增加,数据库性能问题往往会成为系统性能的瓶颈。而 SQL 查询的优化,是提高数据库性能的重要手段。本文将分享 10 个关键点,帮助您优化 Java 中的 SQL 查询,提升数据库性能。

shrgegrb的博客 1088

sql优化的15个小技巧

最近找了找怎么优化SQL,总结了15个基础技巧 因为最近一直在写sql的原因,所以需要知道sql该怎么优化,怕哪一天线上的接口,出了问题,需要优化,就需要采用改造成本最小的. 先上个思维导图 1.避免使用select* ...

weixin_56017850的博客 1万+

【Windows】 解决联想为主的所有自带摄像头(integrate camera)打不开的毛病(特别点名小新、thinkbook、thinkpad、y7000...)

解决联想系列电脑打不开自带摄像头的问题

Iamruzi的csdn博客 3万+

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

优快云Frewen的博客 3376

leftjoin多了性能下降_5分钟快速掌握阿里内部MySQL性能优化的核心技术!

前言BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?有朋友疑问到,SQL优化真的有这么重要么?如下图所示,SQL优化在提升系统性能中是:(成本最低...

weixin_39719427的博客 613

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 469

5 select 选择的值_5分钟快速掌握阿里内部MySQL性能优化的核心技术!

前言BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?有朋友疑问到,SQL优化真的有这么重要么?如下图所示,SQL优化在提升系统性能中是:(成本最低...

weixin_29230059的博客 117

转录组分析中的Fastp和FastQC:如何快速检测数据质量并优化流程

本文深入探讨了转录组分析中数据质量控制的核心流程,重点介绍了Fastp和FastQC两款工具的组合应用。FastQC负责对原始测序数据进行全面质量评估,生成可视化报告;Fastp则能一站式完成接头切除、低质量序列过滤、长度筛选等关键质控步骤。文章提供了详细的参数解读、实战脚本和自动化流程构建指南,帮助研究人员快速检测数据质量并优化预处理流程,为下游的差异表达等分析奠定可靠基础。

weixin_28452161的博客 185

智能问数系统的完整技术栈与实现逻辑

提取并增强数据库 Schema(含业务语义)选择 LLM(开源 qwen2 / 商业 GPT-4o)构建 RAG 向量库(存储历史问法)实现 SQL 安全校验与权限控制添加结果自然语言解释 + 可视化部署到只读数据库环境🔑核心原则“先保证安全,再追求智能”—— 一个能生成错误 SQL 的智能问数系统,比没有更危险。

我们的征途是星辰大海 1639

告别繁琐!3分钟完成MySQL5.7下载与安装的秘籍

上做了实践,发现它的云环境特别适合这种自动化脚本的验证和分享。不用自己准备虚拟机,直接在线就能测试脚本效果,还能一键部署到临时环境做功能验证,省去了本地配置的麻烦。对于需要快速验证MySQL功能的小伙伴来说,这种即开即用的体验确实能节省不少时间。从找官网下载链接到处理各种依赖问题,最后还要手动配置参数,整个过程简直像在闯关打怪。直到最近发现用自动化脚本可以把这个过程压缩到3分钟,才意识到原来效率可以提升这么多。- 下载安装3分钟内完成。- 30分钟下载安装。- 15分钟解决依赖。- 20分钟配置调优。

AgatePanther34的博客 573

使用 MATLAB/Simulink 构建一个电机-液压联合控制系统的仿真模型

本文详细介绍了基于Simulink的电机与液压执行机构联合控制系统建模方法。通过7个步骤,系统讲解了从创建项目、搭建PMSM电机模型、建立逆变器与矢量控制模块,到构建液压泵和执行机构模型的完整过程。重点展示了如何设置关键参数、添加测量反馈模块,并提供了实用的代码片段。教程还包含仿真运行流程、结果分析指标及进阶建议,帮助读者掌握多物理场耦合系统建模的核心技术。该方法适用于机电液一体化系统设计,为工程实践提供有效参考。

amy_mhd的博客 613

从零开始:如何在5分钟内完成AliSQL的快速安装与配置

想要快速部署一个高性能的MySQL分支吗?AliSQL作为阿里巴巴开源的MySQL增强版本,提供了更强大的性能和稳定性。本指南将带你在5分钟内完成AliSQL的完整安装与配置,让你轻松上手这个强大的数据库解决方案。 ## 📦 准备工作与环境检查 在开始安装之前,请确保你的系统满足以下要求: - **操作系统**:支持Linux、Windows、macOS - **内存**:至少1GB可用内

gitblog_00046的博客 535

财务惊呼“不可能”!Python 自动识别 PDF 发票,数据秒级录入系统

电子发票(原生 PDF):这种最爽,文字是可以选中的。我们用 PyPDF2 直接提取文本,速度快,准确率 100%。 纸质扫描/拍照发票:这种是图片。必须上 OCR(光学字符识别)。我们要用百度开源的 PaddleOCR,这是目前中文识别效果最好的开源库之一,吊打早已过气的 Tesseract。

BUG猿的博客 1025

labview高低拼接的理解

计算机的一个字节由8位组成,无符号的8位整形表示的范围为0~255,范围太小了,所以用双字节,即16位整形表示更大范围的数字0 ~65535。2.labview中的高低拼接实质是高8位字节左移8位与低8位字节相加,结果是双字节整形。

qwerqwerdhr的博客 839

5分钟快速了解MySQL索引的各种类型

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

2401_83916283的博客 1027

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

阿里巴巴首推《Java进阶必备宝典》包含六大核心技术,从理论到实战!

前言 作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。 关于Java程序员如何筑基,大部分小白是比较迷茫的!不过今天让人兴奋激动的是,阿里巴巴首推的“Java进阶必备宝典”,内容完整,能够让读者清晰认识Java系统的结构,从基础到高级再到实战,带你一键搞定!这本“Java进阶必备宝典”包括六大核心知识点,主要涉及到的内容有: 核心一:大厂必问并发编程技术 核心二:

一入Java深似海 447

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

5分钟快速上手!CodeGuide分布式文件系统与对象存储完全指南 [特殊字符]

**分布式文件系统和对象存储是现代Java开发中不可或缺的核心技术**。随着互联网应用数据量的爆炸式增长,传统的本地文件存储已经无法满足高并发、高可用、高扩展性的需求。本文将为你全面解析CodeGuide项目中关于分布式存储的最佳实践,帮助你快速掌握企业级文件存储解决方案!💡 ## 为什么需要分布式存储系统? 在传统的单体应用中,文件通常存储在本地服务器上。但随着业务规模扩大,这种方案暴露出

gitblog_01037的博客 1048

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 阿里程序员,入职阿里三个月,真的是太痛苦了,好想走
下一篇: 刷这样的面试题毕业生拿到年薪30w,刷进阿里?那我也能面试了
跟着我学Java
博客等级 码龄6年 660粉丝 1341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值