当前位置: 首页 > news >正文

mysql - 索引基本知识梳理

mysql索引基本知识梳理

索引介绍

官方介绍索引是帮助MySQL高效获取数据的数据结构, 原理为以空间换时间, mysql的索引采用的是B+树的结构

索引的优缺点

优点:

  • 提高查询效率
  • 降低数据库IO成本
  • 通过索引对数据进行排序, 降低排序成本, 降低CPU消耗

缺点:

  • 索引会占用磁盘空间
  • 降低更新表的效率

    对数据进行增删改操作时, 除了保存数据外, 还要更新索引文件, 且耗时随着数据量增加而增加

索引类型

  1. 主键索引 primary key
    索引列中的值必须是唯一的, 不允许有空值。

  2. 唯一索引 unique
    索引列中的值必须是唯一的, 但是允许为空值。

  3. 普通索引 normal
    MySQL中基本索引类型, 没有什么限制, 允许在定义索引的列中插入重复值和空值。

  4. 全文索引 Full Text
    只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时, 如果创建普通索引, 在进行like模糊查询时效率比较低, 这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。

  5. 空间索引 spatial
    MySQL在5.7之后的版本支持了空间索引, 而且支持OpenGIS几何数据模型。MySQL在空间索引这方面遵循OpenGIS几何数据模型规则。

  6. 前缀索引
    在文本类型如CHAR,VARCHAR,TEXT类列上创建索引时, 可以指定索引列的长度, 但是数值类型不能指定。

  7. 其他(按照索引列数量分类)

    • 单列索引
    • 组合索引

      组合索引的使用, 需要遵循最左前缀匹配原则(最左匹配原则)。一般情况下在条件允许的情况下使用组合索引替代多个单列索引使用。

索引的创建和使用

假设以用户基本信息表为例, sql如下:

-- 创建表时, 创建索引
CREATE TABLE `user` (`id` int NOT NULL COMMENT 'id',`name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '姓名',`age` int NOT NULL COMMENT '年龄',`sex` tinyint(1) NOT NULL COMMENT '性别',`phone` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '电话',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

查看表索引

SHOW INDEX FROM 【tableName】;-- 就例子中的user表, 具体sql如下:
-- SHOW INDEX FROM user;

索引结果如下:

TableNon_uniqueKey_nameSeq_in_indexColumn_nameCollationCardinalitySub_partPackedNullIndex_typeCommentIndex_commentVisibleExpression
user0 P R I M A R Y \color{#f56c6c}{PRIMARY} PRIMARY1idA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
  • Non_unique 是否非唯一, 这里说明主键也是唯一键
  • Key_name 主键索引名称默认为PRIMARY
  • Seq_in_index 索引序号递增
  • Column_name 为索引所在列明
  • Index_type 索引数据类型为B树(说明:是B+树)

单列索引

  1. 创建普通索引

    CREATE INDEX 【indexName】 ON 【tableName】(【columnName】);-- 就例子中的user表, 对name字段添加索引, 具体sql如下:
    -- CREATE INDEX idx_name ON user(name);
    
    TableNon_uniqueKey_nameSeq_in_indexColumn_nameCollationCardinalitySub_partPackedNullIndex_typeCommentIndex_commentVisibleExpression
    user0PRIMARY1idA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
    user1 i d x _ n a m e \color{#f56c6c}{idx\_name} idx_name1nameA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
    • Non_unique 是否非唯一, 这里说明普通索引不是唯一
  2. 创建唯一索引

    CREATE UNIQUE INDEX 【indexName】 ON 【tableName】(【columnName】);-- 就例子中的user表, 对phone字段添加唯一索引, 具体sql如下:
    -- CREATE UNIQUE INDEX idx_phone ON user(phone);
    
    TableNon_uniqueKey_nameSeq_in_indexColumn_nameCollationCardinalitySub_partPackedNullIndex_typeCommentIndex_commentVisibleExpression
    user0PRIMARY1idA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
    user0 i d x _ p h o n e \color{#f56c6c}{idx\_phone} idx_phone1phoneA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
    • Non_unique 是否非唯一, 唯一索引肯定是唯一

联合索引

创建索引
CREATE UNIQUE INDEX 【indexName】 ON 【tableName】(【columnName1】,【columnName2】,...,【columnNameN】);-- 就例子中的user表, 对name和age和sex字段添加联合索引, 具体sql如下:
-- CREATE INDEX idx_name_age_sex ON user(name, age, sex);
TableNon_uniqueKey_nameSeq_in_indexColumn_nameCollationCardinalitySub_partPackedNullIndex_typeCommentIndex_commentVisibleExpression
user0PRIMARY1idA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
user1 i d x _ n a m e _ a g e _ s e x \color{#f56c6c}{idx\_name\_age\_sex} idx_name_age_sex 1 \color{#f56c6c}{1} 1nameA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
user1 i d x _ n a m e _ a g e _ s e x \color{#f56c6c}{idx\_name\_age\_sex} idx_name_age_sex 2 \color{#f56c6c}{2} 2ageA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
user1 i d x _ n a m e _ a g e _ s e x \color{#f56c6c}{idx\_name\_age\_sex} idx_name_age_sex 3 \color{#f56c6c}{3} 3sexA0 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)BTREEYES ( N u l l ) \color{#909399}{(Null)} (Null)
  • 由结果可看出, 联合索引是多行数据存在数据库中, 且Seq_in_index是按顺序递增的
联合索引的意义
  1. 减少开销

    建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大的减少开销!

  2. 覆盖索引

    对联合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from tableName where col1=1 and col2=2。那么MySQL可以直接通过便利索引取得数据,无需回表,较少io操作。实际应用中,覆盖索引是主要的提升性能的优化手段之一。

  3. 效率高

    索引列越多,通过索引筛选出来的数据越少。

    假设有1000w数据,select col1,col2,col3 from tableName where col1=1 and col2=2 and col3=3, 假设每个条件可筛选出10%的数据,如果使用单列索引,假设索引列为col1,则筛选出来的数据为 1000w * 10 % = 100w 条数据,然后再回表从100w条数据中找到符合剩下条件的数据,再进行排序和分页等操作。但如果是联合索引,通过索引直接能筛选出 1000w * 10% * 10% * 10% = 1w 条数据,性能有明显提升。

最左前缀匹配

在谈最左前缀匹配前, 可先了解mysql中explain的用法。

下列实例中, 表结构为:

CREATE TABLE `user` (`id` int NOT NULL COMMENT 'id',`name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '姓名',`age` int NOT NULL COMMENT '年龄',`sex` tinyint(1) NOT NULL COMMENT '性别',`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '电话',PRIMARY KEY (`id`),KEY `idx_name_age_sex` (`name`,`age`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

先往user表中插入若干数据

  1. 全值匹配

    符合最左前缀匹配原则

    select * from user where name = ? and age = ? and sex = ?
    select * from user where name = ? and sex = ? and age = ?
    select * from user where age = ? and name = ? and sex = ?
    select * from user where age = ? and sex = ? and name = ?
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)refidx_name_age_sexidx_name_age_sex1027const,const,const1100.00 ( N u l l ) \color{#909399}{(Null)} (Null)

    sql语句中字段的顺序不需要和联合索引定义的字段顺序相同, 查询优化器会判断纠正这条SQL语句以什么样的顺序执行效率高, 最后才能生成真正的执行计划

  2. 匹配最左边的列

    符合最左前缀匹配原则

    select * from user where name = ? 
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)refidx_name_age_sexidx_name_age_sex1022const1100.00 ( N u l l ) \color{#909399}{(Null)} (Null)

    只是name命中索引时, key_len为1022


    select * from user where name = ? and age = ?
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)refidx_name_age_sexidx_name_age_sex1026const1100.00 ( N u l l ) \color{#909399}{(Null)} (Null)

    name和age命中索引时, key_len为1026, 比仅name命中时, key_len大4, 是因为int的长度是4个字节


    select * from user where name = ? and sex = ?
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)refidx_name_age_sexidx_name_age_sex1022const1100.00Using index condition
  3. 匹配列前缀

    对于字符串类型, 模糊匹配中的前缀匹配, 用的是索引, 中缀和后缀走的全表扫描

    • 前缀匹配 – 走索引

      explain select * from user where name like 'user1%';
      
      idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
      1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)refidx_name_age_sexidx_name_age_sex1022const11100.00Using index condition
    • 中缀匹配 – 不走索引

      explain select * from user where name like '%user1%';
      
      idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
      1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)ALL ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)9911.11Using where
    • 后缀匹配 – 不走索引

      explain select * from user where name like '%user1';
      
      idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
      1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)ALL ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null)9911.11Using where
  4. 匹配范围值

    explain select * from user where id > 1;
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)rangePRIMARYPRIMARY4 ( N u l l ) \color{#909399}{(Null)} (Null)98100.00Using where

    最左前缀匹配原则遇到<>, 就会停止匹配, 但是由于id本身是有序的, 由上述结果可知, 该查询使用了id索引, 且为range范围查询


    explain select * from user where id > 1 and age < 10
    
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEuser ( N u l l ) \color{#909399}{(Null)} (Null)rangePRIMARYPRIMARY4 ( N u l l ) \color{#909399}{(Null)} (Null)9833.33Using where

    由于不遵循最左匹配原则,使用的是range扫描。

相关文章:

mysql - 索引基本知识梳理

mysql索引基本知识梳理 索引介绍 官方介绍索引是帮助MySQL高效获取数据的数据结构, 原理为以空间换时间, mysql的索引采用的是B树的结构 索引的优缺点 优点&#xff1a; 提高查询效率降低数据库IO成本通过索引对数据进行排序, 降低排序成本, 降低CPU消耗 缺点&#xff1a…...

Nginx SSL/TLS配置:搭建安全的HTTPS网站

随着互联网安全性的日益提升&#xff0c;HTTPS已经成为网站安全通信的标配。Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;支持SSL/TLS协议&#xff0c;使得我们可以轻松地搭建安全的HTTPS网站。下面&#xff0c;我们将详细介绍如何在Nginx上配置SSL/TLS&#xff0c;…...

echarts 折线图流光效果偏移或不显示

x轴数据需要字符串数组...

Redis数据类型(上篇)

前提&#xff1a;&#xff08;key代表键&#xff09; Redis常用的命令 命令作用keys *查看当前库所有的keyexists key判断某个key是否存在type key查看key是什么类型del key 删除指定的keyunlink key非阻塞删除&#xff0c;仅仅将keys从keyspace元数据中删除&#xff0c;真正的…...

VMware虚拟机安装Linux

1.下载Linux的ISO镜像文件 阿里镜像源网站: https://developer.aliyun.com/mirror/ 清华大学镜像源网站: https://mirrors.tuna.tsinghua.edu.cn/本人选择的是&#xff1a;Centos7.9.2009标准版 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 标准版&a…...

slurm是什么,怎么用? For slurm和For Pytorch有什么区别和联系?

1.slurm是什么&#xff1f; Slurm&#xff08;Simple Linux Utility for Resource Management&#xff09;是一种开源的、用于集群和超级计算机的作业调度系统。它主要用于管理和调度大规模计算任务&#xff0c;使得用户可以有效地利用集群中的计算资源。Slurm提供了一套功能强…...

类和对象【六】友元和内部类

文章目录 友元友元的作用友元的缺点友元函数语法&#xff1a;特点&#xff1a; 友元类语法&#xff1a;特点&#xff1a; 内部类概念特点 友元 友元的作用 友元提供了一种打破封装的方式&#xff0c;有时提供了便利。 友元的主要作用就是打破封装 即可以让一个类的友元函数…...

一点点 cv 经验 1:cv方向、模型评估、输入尺寸、目标检测器设计

一点点 cv 经验 1&#xff1a;cv方向、模型评估、输入尺寸、目标检测器设计 cv 方向Pytorch数据集划分 模型评估误差偏差方差噪声 输入尺寸方法一&#xff1a;让数据适应模型方法二&#xff1a;修改模型适应数据方法三&#xff1a;划分Patch&#xff0c;分别处理 目标检测器结构…...

Java-SpringBoot集成Langchain4j文本嵌入模型实现向量相似度查询

集成Pg数据库并创建vector字段类型 运行pgvector容器 根据需要进行容器目录挂载 docker run --name pgvector \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-d --platform linux/amd64 ankane/pgvector:latest 进入docker容器并创建vector字段类型 docker exec -it pgvecto…...

正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章

在数字化强国的主旋律之下&#xff0c;政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下&#xff0c;正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验&#xff0c;成为了政府信息化建设的杰出代表。甘肃省人大代表履职…...

UniApp中,在页面显示时触发子组件的重新渲染

在UniApp中&#xff0c;要在页面显示时触发子组件的重新渲染&#xff0c;可以利用生命周期钩子函数来实现。具体来说&#xff0c;可以在页面的onShow生命周期钩子中调用子组件的方法或者改变子组件的props&#xff0c;从而触发子组件的重新渲染。 首先&#xff0c;确保子组件有…...

Linux(三)

Linux&#xff08;三&#xff09; Linux网络配置管理网络基础知识 IP地址A类 由1个字节网络地址3个字节主机地址B类 由2个字节网络地址2个主机地址C类 由3个字节网络地址1个主机地址D类:主要用于组播E类:为将来使用保留 子网掩码子网掩码作用网关DNS服务器 Linux用户管理用户的…...

2024年郫都区区级农业生产社会化服务重点服务组织评定申报条件材料、程序要求

第一章 总 则 第一条 为深入贯彻《中共中央办公厅 国务院办公厅关于促进小农户和现代农业发展有机衔接的意见》《农业农村部关于加快发展农业社会化服务的指导意见》精神&#xff0c;充分发挥农业生产社会化服务组织在引领现代农业发展、打造新时代更高水平“天府粮仓”郫都…...

Java入门须知术语

文章目录 前言JVM (Java Virtual Machine)JVM的组成部分JVM的作用为什么需要JVM JRE&#xff08;Java Runtime Environment&#xff09;JRE的组成部分JRE的作用为什么需要JRE JDK&#xff08;Java Development Kit&#xff0c;Java开发工具包&#xff09;JDK的组成部分JDK的作用…...

Spring Boot中集成WebSocket

目录 WebSocket简介WebSocket原理WebSocket的使用场景在Spring Boot中集成WebSocket 创建Spring Boot项目添加依赖配置WebSocket创建WebSocket处理器配置WebSocket端点前端使用WebSocket添加WebSocket拦截器 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的…...

18.多分类问题代码实现

在机器学习中&#xff0c;多分类问题是一类常见的问题&#xff0c;它涉及到将输入数据划分为多个类别中的一个。例如&#xff0c;在图像识别中&#xff0c;我们可能需要将图像分为不同的类别&#xff0c;如手写数字识别&#xff08;MNIST数据集&#xff09;就是将手写数字图像分…...

实时通信的方式——WebRTC

文章目录 基于WebRTC实现音视频通话P2P通信原理如何发现对方&#xff1f; 不同的音视频编解码能力如何沟通&#xff1f;&#xff08;媒体协商SDP&#xff09;如何联系上对方&#xff1f;&#xff08;网络协商&#xff09; 常用的API音视频采集getUserMedia核心对象RTCPeerConne…...

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中&#xff0c;申请权限的步骤有些繁琐&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数&#xff0c;今天就借助 ActivityResultLauncher 来简化书写。 步骤1&#xff1a;创…...

如何将前端项目打包并部署到不同服务器环境

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站尚硅谷的前端讲师【张天禹老师】整理的&#xff0c;用于自己复盘&#xff0c;有需要学习的可以去b站学习原版视频&…...

什么样的展馆场馆才是科技满满?就差一张智慧场馆大屏

随着科技的飞速发展&#xff0c;传统的场馆展示方式已经无法满足现代人对信息获取和体验的需求。智慧场馆大屏作为一种新型的展示方式&#xff0c;应运而生。它将高清大屏显示技术、智能交互技术、数据分析技术等融为一体&#xff0c;为观众带来更加丰富、生动的展示体验。 一…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

持续交付的进化:从DevOps到AI驱动的IT新动能

文章目录 一、持续交付的本质&#xff1a;从手动到自动的交付飞跃关键特性案例&#xff1a;电商平台的高效部署 二、持续交付的演进&#xff1a;从CI到AI驱动的未来发展历程 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/101f72defaf3493ba0ba376bf09367a2.png)中国…...