mysql面试题八(SQL优化)

目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《项目管理超图解》新书来了:快速提升团队行动力的8个关键!

各位&#xff0c;速来对号入座&#xff01; 你的团队&#xff0c;是这样&#xff1f;↓ 还是……这样&#xff1f;↓ 团队失控、协作混乱、项目逾期……有没有可能&#xff0c;是团队行动力出了问题&#xff1f; 所以各位管理者们、创业者们、产品经理/项目经理们、项目管理从…

短说社区的权限设计解读

社区网站的权限设计是非常重要的&#xff0c;合理的权限设计可以维护网站的安全性、保护用户的隐私信息&#xff0c;同时也可以优化用户体验&#xff0c;提升网站的用户参与度。 本文以短说论坛产品为例&#xff0c;讲解下网站的权限如何规划和设计。 短说社区论坛这边考虑到了…

请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 请编写一个函…

数仓建模—数仓架构发展史

数仓建模—数仓架构发展史 时代的变迁,生死的轮回,历史长河滔滔,没有什么是永恒的,只有变化才是不变的,技术亦是如此,当你选择互联网的那一刻,你就相当于乘坐了一个滚滚向前的时代列车,开往未知的方向,不论什么样的技术架构只有放在当前的时代背景下,才是有意义的,…

萌新_1 环境安装(基于QQNT框架 Python Flask)

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 一&#xff1a;安装QQ 目前为开发&#xff0c;推荐都安装到一台电脑上 直接安装到本地windows电脑&#xff0c; 优点方便开发 一键安装 Windows 用户一键安装方案 https://github.com/super1207/install_llob/rel…

创新求变,逆风翻盘:智享ai实景自动直播系统助力商家企业摆脱直播困局。

创新求变&#xff0c;逆风翻盘&#xff1a;智享ai实景自动直播系统助力商家企业摆脱直播困局&#xff01; 全民直播“带货”“万物皆可直播带货”的浪潮下&#xff0c;不管电商直播还是本地生活团购直播&#xff0c;带货 行业的竞争愈发激烈&#xff0c;随着行业不断发展&…

Unity3D 爆火的休闲益智游戏工程源码/3D资源 大合集

Unity3D休闲益智游戏工程源码大合集 一、关卡类游戏工程源码二、跑酷类游戏工程源码三、消除合成类游戏工程源码四、棋牌类游戏工程源码五、RPG(角色扮演)类游戏工程源码六、FPS&#xff08;射击&#xff09;类游戏工程源码十、Unity3D工艺仿真六、Unity游戏资源1、Unity3D 吃鸡…

三款热门婴儿洗衣机深度测评,希亦、觉飞、RUUFFY谁更好用?

近几年科技高速发展&#xff0c;我们的生活也因此变得更加便捷、健康高效。尤其是在家庭生活中&#xff0c;各种新兴家电的出现让我们的生活变得更加健康卫生。婴儿洗衣机也为现代家庭提供了极大的便捷。由于婴儿刚出生免疫力比较弱&#xff0c;所以建议婴儿的衣物尽量和大人的…

Android集成Sentry实践

需求&#xff1a;之前使用的是tencent的bugly做为崩溃和异常监控&#xff0c;好像是要开始收费了&#xff0c;计划使用开源免费的sentry进行替换。 步骤&#xff1a; 1.修改工程文件 app/build.gradle apply plugin: io.sentry.android.gradle sentry {// 禁用或启用ProGua…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号&#xff1a;A28 企业介绍 江西智博环境技术有限公司始创于2008年初&#xff0c;总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

唯品会关键字搜索接口技术深度解析:实现原理与优化策略

唯品会关键字搜索接口技术深度解析 一、引言 在快速发展的电商领域中&#xff0c;唯品会以其独特的品牌折扣模式吸引了大量消费者。作为连接用户与商品的桥梁&#xff0c;唯品会的关键字搜索接口在提升用户体验、促进商品销售方面发挥着至关重要的作用。本文将深入剖析唯品会…

go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端 前言 从这篇文章开始我们就正式进入了日志收集系统的编写&#xff0c;后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧&#xff01; 需要实现的功能 我们要收集指定目录下的日志文件&#xff0c;将它们发…

opencv人脸打马赛克

import cv2def FaceFind(imgPath: str) -> list:image cv2.imread(imgPath)gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 返回人脸坐标列表faces face_cascade.detectMultiScale(gray, scal…

《王者荣耀》游戏攻略:角色排行榜——墨子

作为天蝎座黄金圣斗士&#xff0c;墨子以他的正义感和荣誉感闻名&#xff0c;一直站在正义的一方&#xff0c;忠于女神雅典娜。他的猩红毒针象征着审判和死亡&#xff0c;而他所施加的十五针“安达里士”更是生命终结的预兆。在冥王再次发动战争之际&#xff0c;墨子追随雅典娜…

中仕公考:广东省2024高校毕业生‘三支一扶‘开始报名

广东省2024高校毕业生三支一扶于今日4月22日正式开始报名&#xff0c;报名人员请于2024年4月22日9:00-4月26日17:00登录广东省高校毕业生“三支一扶”计划信息管理系统进行报名。

【星海出品】windows下的mysql安装

好久没有安装MYSQL了&#xff0c;因为最近要用一下 &#xff0c;所以安装了一下。 突然迷茫了一下&#xff0c;决定写一个mysql安装的教程。给未来的自己。 STEP ONE 打开百度&#xff0c;搜索MYSQL&#xff0c;然后会看到MYSQL 官方的字样。 https://www.mysql.com/ 点进去&a…

WP-AutoPostPro 汉化版: WordPress自动采集发布插件

WP-AutoPostPro 是目前最好用的WordPress自动采集发布插件&#xff0c;最大的特点是可以采集来自于任何网站的内容并自动发布到你的WordPress站点。真正做到可以采集任何网站的内容并自动发布&#xff0c;采集过程完全自动进行无需人工干预&#xff0c;并提供内容过滤、HTML标签…

【Git教程】(十六)基于构建服务器的工作 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 基于构建服务器的工作 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 预备构建服务器3.2 构建服务器上的 Git3.3 比对本地开发版本与最后成功构建版本之间的差异3.4 基于构建历史的排错 4️⃣ 替代解决方案4.1 使用标签4.2 将构建历史放在中央版本库中 许多项目…

7. Django 模型与数据库

第7章 模型与数据库 Django对各种数据库提供了很好的支持, 包括PostgreSQL, MySQL, SQLite和Oracle, 而且为这些数据库提供了统一的API方法, 这些API统称为ORM框架. 通过使用Django内置的ORM框架可以实现数据库连接和读写操作. 本章以SQLite数据库为例, 分别讲述Django的模型…

李沐动手学深度学习-优化和深度学习

优化和深度学习 对于深度学习问题&#xff0c;我们通常会先定义损失函数。一旦有了损失函数&#xff0c;就可以使用优化算法来尝试最小化损失。在优化中&#xff0c;损失函数通常被称为优化问题的目标函数。按照传统惯例&#xff0c;大多数优化算法都关注的是最小化。 优化的…