mysql面试题九(SQL优化)

news2025/1/24 2:28:07

目录

1.一条 SQL 是如何执行的

2.索引失效的几种情况

3.EXPLAIN

4.Where 子句如何优化

5.超大分页或深度分页如何处理

6.大表查询如何优化

7.分库分表

基本概念

分库分表方法

水平拆分

垂直拆分

分库分表后的注意事项


1.一条 SQL 是如何执行的

在MySQL中,一条SQL语句从提交到服务器到最终返回结果,会经历一系列复杂的内部处理过程。以下是SQL语句在MySQL中执行的基本步骤概述:

  1. 连接器

    • 客户端应用程序(如数据库管理工具、应用程序代码等)与MySQL服务器建立连接。连接器负责验证用户的登录凭据(用户名、密码),以及与客户端保持通信通道。
  2. 查询缓存(MySQL 8.0之前)

    • 对于SELECT查询(不涉及数据修改的查询),在较早版本的MySQL(如8.0之前的版本)中,连接器会先检查查询缓存。如果查询语句与缓存中的某个条目匹配且数据未过期,查询结果可以直接从缓存返回给客户端,避免了进一步的处理。然而,由于查询缓存的局限性(如易受数据变更影响导致缓存失效、管理成本高等),MySQL 8.0版本及以后已移除了查询缓存功能。
  3. 分析器

    • 如果查询缓存不适用或未命中,MySQL会将接收到的SQL语句交给分析器。分析器首先进行词法分析,将SQL语句拆解成一个个有意义的单词(token),如标识符、关键词、操作符等。接着进行语法分析,根据MySQL的语法规则检查这些单词组成的序列是否符合SQL语法规则。如果SQL语句的语法错误,此时会返回错误信息。
  4. 优化器

    • 通过语法分析的SQL语句,会被优化器接手。优化器负责确定最优的执行计划,即如何最高效地获取所需数据。这包括选择合适的索引、决定表的连接顺序和方式(如Nested Loop Join、Hash Join、Merge Join)、评估是否需要进行全表扫描等。优化器基于统计信息、成本模型等进行决策,旨在最小化查询的执行时间和资源消耗。
  5. 执行器

    • 有了执行计划之后,执行器开始执行查询。它与存储引擎交互,调用相应的接口来访问数据。对于SELECT查询,执行器按计划读取数据并返回给客户端;对于INSERT、UPDATE、DELETE等写操作,执行器会根据计划修改数据,并确保事务的ACID特性得到保证。
  6. 权限校验

    • 在查询执行过程中,尤其是在涉及到特定表或列的操作时,执行器会与系统权限模块协作,检查当前用户是否有执行该操作的权限。如果没有相应权限,查询会被终止,并返回权限错误。
  7. 存储引擎

    • MySQL支持多种存储引擎(如InnoDB、MyISAM等)。执行器与具体的存储引擎交互,执行实际的数据读写操作。存储引擎负责管理数据的物理存储、索引结构、锁机制、事务支持等。
  8. 日志模块

    • 对于涉及数据更改的SQL语句,MySQL会记录相应的日志。例如,InnoDB存储引擎使用redo log(重做日志)保证 crash-safe 能力,binlog(二进制日志)用于复制和备份。这些日志在语句执行过程中或完成后被写入,以确保数据的一致性和可恢复性。
  9. 结果返回与清理

    • 执行完毕后,执行器将查询结果返回给客户端。如果是SELECT查询,结果集可能会被压缩后再传输。完成所有操作后,若连接不再需要,连接器会负责断开连接,释放相关资源。

综上所述,一条SQL语句在MySQL中执行的过程涉及多个组件的协作,包括连接管理、查询解析与优化、权限验证、数据访问、日志记录以及结果返回等环节,确保了SQL语句的正确执行和数据的安全访问。

2.索引失效的几种情况

  1. 数据类型不匹配

    • 当查询条件中的数据类型与索引列的数据类型不一致,或者转换可能导致索引无法精确匹配时,索引可能失效。例如,对整型索引列使用字符串类型的值进行查询,或对日期索引列使用错误的格式。
    • 数据类型出现隐式转化。如 varchar 不加单引号的话可能会自动转换为 int 型,使索引无效,产生全表扫描;
  2. 不遵循最左前缀原则

    • 对于复合索引(包含多个列的索引),查询必须从索引的第一列开始,并按照索引定义的列顺序进行。如果查询条件没有以索引的第一列开头,或者跳过了索引中间的列,索引可能无法被充分利用。
  3. 在索引列上使用 IS NULL 或 IS NOT NULL操作。最好给列设置默认值。
  4. 使用NOT!=<>操作符

    • 对于某些类型的索引(如B树索引),使用NOT!=<>操作符时,MySQL可能无法有效地利用索引进行查询。因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
  5. 使用OR连接多个条件

    • or 语句前后没有同时使用索引。当 or 左右查询字段只有一个是索引,该索引失效,只有左右查询字段均为索引时,才会生效;
  6. 前导模糊查询

    • 使用LIKE操作符进行查询时,如果查询模式以通配符%开头(如LIKE '%value%'),索引通常无法发挥作用,因为这种模式不满足最左前缀匹配原则。
  7. 对索引进行表达式计算或函数操作

    • 如果查询条件包含对索引列进行数学运算、函数调用(如CONCAT()SUBSTRING(),日期函数等)或类型转换,索引通常无法被直接使用,因为索引存储的是原始值而非计算后的结果。
  8. 索引列包含大量重复值

    • 当索引列的值分布非常集中,尤其是存在大量重复值时,即使查询使用了索引列,MySQL可能判断全表扫描比使用索引更为高效
  9. 索引列使用范围查询后紧跟非索引列查询

    • 当索引列使用范围查询(如><BETWEEN等)后,如果紧随其后的查询条件包含未被索引的列,那么索引可能只对范围查询部分有效,后续的查询条件可能导致索引失效。
  10. 索引未被更新或维护

    • 如果数据发生改变(如插入、更新或删除)后,对应的索引没有及时更新,或者索引由于长时间未进行优化(如重建、修复)而导致统计数据过时或索引结构损坏,都可能导致索引无法正常工作。

3.EXPLAIN

EXPLAIN是MySQL提供的一种用于分析SQL查询执行计划的命令。通过在查询语句前添加EXPLAIN关键字,可以获取到MySQL对这条查询的详细执行信息,包括访问哪些表、采用何种连接类型、使用哪些索引、是否进行排序和分组、估计的行数、是否使用临时表等。这些信息有助于理解查询的执行流程,识别潜在性能瓶颈,并据此进行优化。

以下是对EXPLAIN输出结果中各字段的简要解释:

  • id:查询执行的顺序号。相同id表示这部分查询是一个执行单元,从上到下执行。id值越大,执行优先级越高,越先被执行。

  • select_type:查询类型。常见的有SIMPLE(简单查询,无子查询或UNION)、PRIMARY(外部查询,最外层的SELECT)、SUBQUERY(子查询中的第一个SELECT)、DEPENDENT SUBQUERY(子查询依赖于外部查询的结果)、UNION(UNION中的第二个或后续SELECT)等。

  • table:查询涉及的表名。如果查询使用了别名,这里显示的是别名。

  • type:访问类型,即MySQL决定如何查找表中的行。从最优到最差依次为:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,最好能尽可能接近"system"或"const"。

  • possible_keys:查询可能使用的索引。如果为空,表示没有可用的索引。

  • key:实际使用的索引。如果没有使用索引,显示为NULL。

  • key_len:使用的索引长度,用于估算索引中使用的字节数。这可以帮助判断是否使用了索引的一部分(前缀索引)或者是否完全使用了索引。

  • ref:哪个列或常量与索引进行了比较。

  • rows:MySQL根据统计信息估算的需要读取的行数。这个值越小越好。

  • filtered(MySQL 5.7.8及以上版本):一个百分比值,表示存储引擎认为需要访问的行数占总行数的比例。结合rows字段,可以更准确地预估查询的实际工作量。

  • Extra:包含其他额外信息,如是否使用了覆盖索引(Using index)、是否使用了临时表(Using temporary)、是否进行了文件排序(Using filesort)、是否进行了全表扫描(Using where; Using index)等。

使用EXPLAIN的示例:

EXPLAIN SELECT * FROM employees e JOIN departments d ON e.dept_id = d.id WHERE e.salary > 50000;

运行上述命令后,MySQL将返回一个表格,展示对查询的执行计划分析结果。通过解读这些信息,可以了解MySQL如何执行查询,识别是否存在全表扫描、未使用索引等问题,进而针对性地优化查询或调整索引策略。

4.Where 子句如何优化

优化WHERE子句是提高SQL查询性能的关键步骤之一。以下是一些建议和策略,帮助您优化WHERE子句以提高查询效率:

  1. 使用索引

    • 确保WHERE子句中涉及的列已被正确索引。对于频繁查询且数据范围筛选明显的列,创建合适的索引(如单列索引、复合索引、全文索引等),并遵循最左前缀原则。使用EXPLAIN分析查询计划,确认索引是否被正确使用。
  2. 避免全表扫描

    • 尽可能减少对大数据表的全表扫描。如果查询条件能限定在一个较小的数据范围内,通过索引快速定位数据,可显著提高查询速度。避免在WHERE子句中使用无法利用索引的操作,如对非索引列的范围查询、非索引列的IN列表查询等。
  3. 简化条件表达式

    • 减少复杂的逻辑表达式和嵌套查询。尽量将OR条件改写为UNIONIN子查询,因为OR可能导致索引失效。避免在WHERE子句中使用否定条件(如NOT IN!=),它们往往难以利用索引。
  4. 避免使用函数和表达式

    • 不要在WHERE子句中对索引列使用函数或表达式,因为这会导致索引失效。如果必须使用函数或表达式,考虑是否能在查询外先计算好值,然后作为常量传入查询。
  5. 合理使用INEXISTS

    • 当需要检查某列值是否在一组值中时,使用IN通常比多次OR条件更高效。对于关联子查询,当只需要判断是否存在匹配记录时,使用EXISTS通常比INJOIN更高效。
  6. 避免在关联查询中使用!=<>

    • 在多表关联查询中,避免在ONWHERE子句中使用!=<>比较关联键,因为这可能导致无法使用索引。改用LEFT JOIN ... IS NULLNOT EXISTS等方法来实现相同的效果。
  7. 减少NULL值的处理

    • NULL值在索引中处理起来较为复杂,可能导致索引部分失效。尽量避免在频繁查询的列中使用NULL,并在设计表结构时考虑使用默认值或空字符串代替。对于必须存在的NULL值,可以创建NULL友好索引(如FULLTEXT索引、SPATIAL索引等)或使用COALESCE()IFNULL()等函数转换为非NULL值进行查询。
  8. 避免在索引列上使用LIKE通配符

    • 对于LIKE查询,尽量避免在索引列上使用前导通配符(如'%value%'),因为这会导致索引失效。如果必须使用LIKE,尝试将通配符置于模式末尾(如'value%'),并确保模式足够短以利用索引。
  9. 批量处理

    • 如果需要对大量数据进行过滤,考虑将多次单个查询合并为一次批量查询,利用INJOIN处理,减少网络通信开销和数据库服务器的压力。
  10. 定期维护索引和统计信息

    • 定期对表进行分析(如ANALYZE TABLE),更新索引统计信息,确保优化器能做出准确的成本估算。定期检查并重建(如OPTIMIZE TABLE)或修复(如REPAIR TABLE)索引,保持索引结构健康。

通过以上策略优化WHERE子句,可以有效提高查询性能,降低数据库服务器负载,提升应用程序响应速度。记得在修改查询后使用EXPLAIN分析查询计划,验证优化效果。

5.超大分页或深度分页如何处理

处理超大分页或深度分页时,由于涉及大量数据的检索和排序,传统基于LIMITOFFSET的分页方式往往会面临性能瓶颈。以下是一些优化超大分页或深度分页的方法:

  1. Keyset(Cursor-Based)分页

    • 使用有序的唯一键或索引来实现分页。首次查询时,获取指定数量的记录以及最后一个记录的排序键值。后续分页时,直接使用这个键值作为起始点进行查询,而不是使用OFFSET。这样可以避免跳跃式读取大量无关数据,显著减少IO和CPU负担。

    示例:

    -- 第一页
    SELECT * FROM table ORDER BY sort_column LIMIT 10;
    
    -- 第二页,假设上一页最后一条记录的sort_column值为last_value
    SELECT * FROM table WHERE sort_column > last_value ORDER BY sort_column LIMIT 10;
  2. 优化LIMITOFFSET查询

    • 避免使用大数值的OFFSET。当OFFSET值较大时,可以尝试改写查询,利用索引来直接定位数据。例如,如果表有连续的主键或唯一索引,且数据按主键递增排列,可以利用主键值直接跳过不需要的数据。

    示例:

    -- 原查询:SELECT * FROM table LIMIT 1000000, 10
    -- 优化为:SELECT * FROM table WHERE id > 1000000 LIMIT 10
  3. 利用索引覆盖(Index Covering)

    • 创建覆盖索引来包含查询所需的所有列,使得查询仅需从索引中获取数据,无需回表,从而减少IO。如果查询结果集可以完全由索引提供,性能将大大提升。
  4. 子查询优化

    • 使用子查询预先筛选出需要的记录范围,然后再进行主查询,避免在大表上直接进行排序和分页。

    示例:

    -- 原查询:SELECT * FROM table ORDER BY sort_column LIMIT 1000000, 10
    -- 优化为:SELECT * FROM (
        SELECT id FROM table ORDER BY sort_column LIMIT 1000000, 10
    ) AS subquery
    JOIN table ON table.id = subquery.id;
  5. 复合索引优化

    • 根据查询条件和排序需求,创建复合索引来同时涵盖筛选条件和排序字段,减少排序开销。
  6. 基于索引的再排序

    • 如果必须对大量数据进行排序,考虑在索引中预先存储排序后的数据,或者在查询时仅对索引进行排序,避免对整个数据集进行排序。
  7. 利用PREPARE语句

    • 对于频繁执行的分页查询,使用PREPARE语句预编译查询计划,可以减少解析和优化的时间。
  8. 数据分片(Sharding)

    • 如果数据规模极其庞大,考虑使用分片技术将数据分散到多个物理节点上。这样,分页查询仅需在单个分片上执行,显著减小数据处理量。
  9. 缓存策略

    • 对于访问频繁且结果集相对固定的分页查询,可以利用缓存(如Redis、Memcached等)存储部分或全部结果,减少数据库查询压力。特别是对于较深的分页,缓存前几页或者最近访问过的页面可以显著提升用户体验。
  10. 应用层面分页

    • 如果业务允许,将分页操作移到应用层面。例如,先获取所有符合条件的ID列表(使用索引来快速获取),然后在应用中进行分页。这种方法适用于数据总量大但实际展示数据量小的场景。

综上所述,处理超大分页或深度分页时,应结合具体业务场景和数据特点,灵活运用上述策略进行优化。关键在于减少不必要的数据访问、排序和传输,以及合理利用索引来加速查询。同时,持续监控查询性能,根据实际情况调整优化措施。

6.大表查询如何优化

可以从分库分表、读写分离以及缓存三个维度分别阐述

7.分库分表

MySQL分库分表是一种数据库水平扩展策略,用于应对随着数据量增长导致单个数据库实例性能瓶颈的问题。分库分表的主要目的是通过将数据分散存储在多个数据库或多个表中,降低单个数据库的压力,提高查询性能、并发处理能力和系统的整体可伸缩性。以下是MySQL分库分表的基本概念、方法和注意事项:

基本概念

  • 分库:将原本存储在单一数据库中的数据,按照一定规则划分到多个独立的数据库中。每个数据库称为一个分片或分库,它们通常部署在不同的服务器或集群上,以实现资源的分布式处理。

  • 分表:在单个数据库内部,将一张大表按照某种规则切分为多个小表,这些小表被称为子表或分表。每个子表存储原表的一部分数据,从而降低单表的数据量和索引大小。

分库分表方法

水平拆分

  • 水平拆分是最常用的分库分表方式,适用于数据量大且表结构相同的场景。将数据行按照某一列(如用户ID、时间戳等)的值进行切分,将不同范围的数据分布到不同的数据库或表中。

    • 哈希分片:根据某一列的值通过哈希函数计算出分布位置,确保数据均匀分布。例如,对用户ID取模,将其映射到不同的数据库或表。

    • 范围分片:按照某一列的值的自然区间(如时间范围、地理位置区域等)划分数据。例如,按年份或月份将订单表拆分为多个表。

    • 列表分片:根据某一列的特定值列表进行分配,适用于数据有明显业务分组的情况。例如,按用户所属的地区或部门划分数据。

垂直拆分

  • 垂直拆分是根据表中列的相关性,将一张包含多种类型数据的大表拆分为多张结构更紧凑的小表,通常用于减少单表的宽度和索引大小。

    • 按业务拆分:将不同业务相关的列分离到不同的表或数据库,如将用户基本信息与用户行为记录分开存储。

    • 按访问频率拆分:将经常一起访问且访问频次较高的列放在同一张表,将访问较少的列放入另一张表。

分库分表后的注意事项

  1. 数据路由:需要设计一套数据路由机制,根据分片规则自动将查询请求发送到正确的数据库或表。这通常通过中间件(如ShardingSphere、MyCat等)或自定义应用逻辑实现。

  2. 跨库/表查询:分库分表后,原本简单的跨表查询可能变为复杂的分布式查询。需要避免或尽量减少这类查询,或者通过应用层拼接、物化视图、分布式查询引擎等方式解决。

  3. 事务处理:分库分表后,跨分片的事务处理变得复杂。可能需要引入分布式事务解决方案(如两阶段提交、柔性事务等)或调整业务逻辑以适应分布式环境下的事务一致性要求。

  4. 数据同步与备份:分库分表后,数据备份和恢复、实时同步等运维操作需要考虑多个数据库或表。可能需要使用专门的数据库复制工具(如MySQL Replication、Percona XtraDB Cluster等)或分布式数据同步框架。

  5. 数据均衡与扩容:随着数据增长,可能需要重新调整分片规则或增加新的分片。这要求分片策略具备良好的可扩展性,并配合数据迁移工具实现数据的动态迁移。

  6. 全局唯一ID生成:在分库分表环境中,需要确保跨分片的主键或其他唯一标识符全局唯一。可以使用雪花算法、UUID、分布式ID生成服务等方案生成唯一ID。

总的来说,MySQL分库分表是一种应对海量数据存储和访问的有效手段,但同时也增加了系统复杂性。实施分库分表时,应充分评估业务需求、数据特性和未来扩展预期,制定合理的分片策略,并配套相应的数据路由、事务处理、运维管理等解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1633180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++|STL简介-string-vector基础运用

目录 什么是STL STL里面有什么 容器 string 序列式容器 vector deque list 关联式容器 set multiset map multimap 算法 非可变序列算法 可变序列算法 排序算法 数值算法 什么是STL STL(标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一…

不完全微分PD控制器(CODESYS源代码+算法详细介绍)

完全微分计算公式为Kp*Td/Ts(e(k)-e(k-1))。有关位置式PID和增量式PID更多相关内容,大家可以参考下面的文章链接: 1、CODESYS位置式PID CODESYS位置式PID(完整ST源代码)_codesys pid功能块-CSDN博客文章浏览阅读1.1k次,点赞2次,收藏2次。CODESYS增量式PID完整源代码请参看…

红极一时的VB,输给时代,新型开发工具,或成未来

若要称VB为非专业人员改造自身行业的得力工具&#xff0c;这绝不夸张。 对于众多编程语言而言&#xff0c;单纯学习语言本身往往应用有限&#xff0c;比如C和Qt虽有关联却各自独立&#xff0c;但VB却独树一帜&#xff0c;它的实用性远超常规编程语言。 在软件开发的历史长河中…

【go零基础】go-zero从零基础学习到实战教程 - 1项目表设计

既然是0基础&#xff0c;现在来写下设计思路&#xff0c;因为go-zero是个微服务架构&#xff0c;所以&#xff0c;哪怕是0基础&#xff0c;也从两个服务模块开始写起。 我们的目标是&#xff1a;最小可用微服务架构最佳实践&#xff01; 好了&#xff0c;饼画完了。 第0部分写到…

next初体验

创建项目 npm init next-app app-test 每次都会使用最新的creat-next-app去创建最新版本的项目 这里新版本的路径有所区别&#xff1a;他多了一个app的文件夹。 兼容老项目我们可以在app文件夹的同级增加pages目录&#xff0c;然后创建页面。新项目可以直接在app下创建&…

网络层 --- IP协议

目录 1. 前置性认识 2. IP协议 3. IP协议头格式 3.1. 4位版本 3.2. 4位首部长度 3.3. 8位服务类型 3.4. 16位总长度 3.5. 8位生存时间 TTL 3.6. 8位协议 3.7. 16位首部检验和 3.8. 32位源IP和32位目的IP 4. 分片问题 4.1. 为什么要分片 4.2. 分片是什么 4.2.1. …

进迭时空宣布开源RISC-V芯片的AI核心技术

仟江水商业电讯&#xff08;4月29日 北京 委托发布&#xff09;4月29日&#xff0c;在“创芯生生不息——进迭时空2024年度产品发布会”上&#xff0c;进迭时空CEO、创始人&#xff0c;陈志坚博士宣布将开源进迭时空在自研RISC-V AI CPU上的核心技术&#xff0c;包括AI扩展指令…

根据txt文件绘制词云 -- python

根据一段文字绘制词云&#xff0c;我们有两种方法 &#xff0c;一种是登录专业的绘图网站http://yciyun.com/ 不过&#xff0c;貌似这个网站需要会员才可以体验&#xff0c;他只是给出了一些形状图案的词云&#xff0c;虽然看起来很精美&#xff0c;但是他不能让我们自己随意更…

看 周鸿祎、雷,那俩红、绿少年

导语&#xff1a;百战归来&#xff0c;他们成为了中国经济的新“发动机” 文 | 魏强 雷军、周鸿祎变成网红这事&#xff0c;已不仅是传播现象&#xff0c;也不是这两个老板为了卖车的卖力表演和吆喝&#xff0c;它俨然成了中国经济新一轮的“发动机”。 过去几年&#xff0c;因…

包 与 访问修饰符

1. 包 1.1 包的三大作用 1. 区分相同名字的类 2. 当类很多时,可以很好的管理类[看Java API文档] 3. 控制访问范围 1.2 包基本语法 package com.zakeau; 说明: 1. package关键字,表示打包. 2. com.zakedu : 表示包名 1.3 包的本质分析(原理) 包的本质实际上就是创建不同的…

Nuxt3 实战 (六):Footer 底部布局

前言 今天开发项目的 Footer 布局&#xff0c;这里我们参考 Nuxt-UI 官网的布局。 需求拆分 准备好域名备案号和 icp 图标底部社交按钮链接或其他链接布局组件开发 Footer 布局 新建 components/AppFooter.vue 文件&#xff1a; <template><footer class"f…

什么是编译与链接呢!

引言&#xff1a; 在ANSIC中存在两种编译环境 第一种是翻译环境&#xff1a;可以将环境中的源代码转换成能被机器执行的二进制指令&#xff1b;翻译环境即为我们所使用的编译器&#xff0c;可以将test.c文件翻译为test.exe文件 第二种是运行环境&#xff1a;它用于实际代码的…

LabVIEW 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到LabVIEW.2024”。 返回解压后的文件夹&#xff0c;鼠标右击“ni_labview-2024”选择“装载”。 鼠标右击“Install”选择“以管理员身份运行”。 点击“我接受上述2条许可协议”&#xff0c;然后点击“下一步”。 点击“下一步”。 …

Docker容器中安装vim

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Docker 是一个开源…

uni-app中配置自定义条件编译

前提&#xff1a;官网提供的自定义编译不满足条件 package.json | uni-app官网 下文&#xff1a;不详细写&#xff0c;主要写关键思路 package.json文件 主要看scripts的执行命令&#xff0c;其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

计算机组成实验(5)

一、实验目的和要求 1.1 实验目的 1. 复习二进制加减、乘除的基本法则 2. 掌握补码的基本原理和作用 3. 了解浮点数的表示方法及加法运算法则 4. 进一步了解计算机系统的复杂运算操作 1.2 实验要求 1. 熟悉二进制原码补码的概念,了解二进制加减乘除的原理与操作实现。 …

部署YUM仓库和NFS共享存储服务

目录 1. YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 yum在线源替换方法 2.制作YUM源 2.1制作ftp源 3.yum软件包的下载方式 4.NFS共享存储服务 4.1 NFS 4.2 NFS网络文件系统 4.3 NFS配置 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包&#xff08;是Red-Ha…

AI与新能源催生新增长,电子制造业如何提升预测力与连接力?

国产替代和新基建带来的结构性机遇&#xff0c;AI和新能源汽车行业的增长所带来的需求提升&#xff0c;都给电子制造行业以乐观的理由。但是&#xff0c;不少企业的客户经营管理、供需平衡与供应链协同等所面临的挑战仍在&#xff0c;如何为行业高质量增长持续注入动能&#xf…

Mycat(三)读写分离双主双从

文章目录 搭建双主双从双主机配置双从机配置双从配置两个主机互相复制停止从服务复制功能重新配置主从 修改 Mycat 的集群配置实现多种主从双主双从集群角色划分增加两个数据源修改集群配置文件读写分离配置扩展&#xff08;1&#xff09;读写分离(一主一从,无备)(m是主,s是从)…

不同规模企业如何进行系统集成?

摘要&#xff1a;系统集成作为企业信息化建设的重要组成部分&#xff0c;其实施策略和方法在不同规模的企业中存在着显著的差异。以下是针对小型、中型、大型企业在系统集成方面所做的六点深度对比&#xff1a; 1. 集成需求复杂度 •小型企业&#xff1a;系统集成需求相对简单…