MySQL索引原理(标贝科技)

标贝科技 https://ai.data-baker.com/#/?source=qwer12

填写邀请码fwwqgs,每日免费调用量还可以翻倍
在这里插入图片描述
在这里插入图片描述

什么是索引?

索引是帮助MySQL高效获取数据的数据结构。索引的本质就是数据结构。索引的目的在于提高查询效率,可以类比图书的目录,根据目录中的页码快速找到所需的内容。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。

索引的优点和缺点

  1. 优点
    1)索引可以提高数据检索的效率,降低数据库的IO成本
    2)索引可以将随机IO变成顺序IO
    3)索引可以帮助服务器避免排序和创建临时表
  2. 缺点
    1)虽然索引提高了查询的速度,同时也降低了更新表的速度,比如对表进行INSERT、UPDATE、DELETE。因为更新表时,Mysql不仅要保存数据,也要对索引文件进行保存。
    2)索引需要占用磁盘,当表设置大量的索引时,索引文件需要占用的磁盘空间会更大。
    3)对于非常小的表,大部分情况下简单的全表扫描更高效。

索引的原理

索引的本质就是通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。
  数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。但如果是1千万的记录呢,分成几段比较好?稍有算法基础的同学会想到搜索树,其平均复杂度是lgN,具有不错的查询性能。但这里我们忽略了一个关键的问题,复杂度模型是基于每次相同的操作成本来考虑的,数据库实现比较复杂,数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右,所以简单的搜索树难以满足复杂的应用场景。

磁盘IO与预读

前面提到了访问磁盘,那么这里先简单介绍一下磁盘IO和预读,磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分,寻道时间指的是磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下;旋转延迟就是我们经常听说的磁盘转速,比如一个磁盘7200转,表示每分钟能转7200次,也就是说1秒钟能转120次,旋转延迟就是1/120/2 = 4.17ms;传输时间指的是从磁盘读出或将数据写入磁盘的时间,一般在零点几毫秒,相对于前两个时间可以忽略不计。那么访问一次磁盘的时间,即一次磁盘IO的时间约等于5+4.17 = 9ms左右,听起来还挺不错的,但要知道一台500 -MIPS的机器每秒可以执行5亿条指令,因为指令依靠的是电的性质,换句话说执行一次IO的时间可以执行40万条指令,数据库动辄十万百万乃至千万级数据,每次9毫秒的时间,显然是个灾难。下图是计算机硬件延迟的对比图,供大家参考:

various-system-software-hardware-latencies
various-system-software-hardware-latencies

考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。

索引的数据结构

B+树

在这里插入图片描述
B+树的查找过程
  如上图,是一颗b+树,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。
b+树的优点:
  B+树的每个节点可以表示的信息更多,充分利用了磁盘预读的数据,这在从磁盘中查找数据(先读取到内存、后查找)的过程中,可以减少磁盘 IO 的次数,从而提升查找速度
  关键字全部存放在叶子节点中,而叶子节点中有一个指针指向一下个叶子节点。这样可以提高区间访问的性能(范围查询)。

聚簇索引和非聚簇索引

聚簇索引

聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
  Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。
聚簇索引的优缺点:
优点:
  1.数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快。
  2.聚簇索引对于主键的排序查找和范围查找速度非常快。
缺点:
  1.插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
  2.更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
  3.二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

非聚簇索引

在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。
  Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值外,还包含了相应行数据的聚簇索引键。
  辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。在innodb中有时也称辅助索引为二级索引。在这里插入图片描述

Mysql索引的实现

InnoDB索引实现

InnoDB使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同.
1)主键索引:
  MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
在这里插入图片描述
(图inndb主键索引)是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
2)InnoDB的辅助索引
InnoDB的所有辅助索引都引用主键作为data域。例如,下图为定义在Col3上的一个辅助索引:
在这里插入图片描述
  InnoDB 表是基于聚簇索引建立的。因此InnoDB 的索引能提供一种非常快速的主键查找性能。不过,它的辅助索引(Secondary Index, 也就是非主键索引)也会包含主键列,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义 、很多索引,则争取尽量把主键定义得小一些。InnoDB 不会压缩索引。
  文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。
  不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白:
1、为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,
2、用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。
  InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。

MyISAM索引实现

MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
1)主键索引:
  MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM主键索引的原理图:
在这里插入图片描述
这里设表一共有三列,假设我们以Col1为主键,图myisam1是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。
2)辅助索引(Secondary key)
  在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示:
在这里插入图片描述
  同样也是一颗B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
  MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。
  MyISM使用的是非聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通过辅助键检索无需访问主键的索引树。
  为了更形象说明这两种索引的区别,我们假想一个表如下图存储了4行数据。其中Id作为主索引,Name作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的差异。在这里插入图片描述

聚簇索引和非聚簇索引的区别

聚簇索引的叶子节点存放的是主键值和数据行,支持覆盖索引;二级索引的叶子节点存放的是主键值或指向数据行的指针。
由于节子节点(数据页)只能按照一颗B+树排序,故一张表只能有一个聚簇索引。辅助索引的存在不影响聚簇索引中数据的组织,所以一张表可以有多个辅助索引

使用索引需要注意的地方

1、索引不会包含有null值的列,只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时建议不要让字段的默认值为null。
2、使用短索引,对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3、索引列排序查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4、一般情况下不推荐使用like操作,如果必须要使用,如何使用也是一个问题。like “%小明%” 不会使用索引而like “小明%”可以使用索引。
5、不要在列上进行运算,这将导致索引失效而进行全表扫描。

参考资料

https://blog.youkuaiyun.com/qq_39390545/article/details/108232888
https://www.cnblogs.com/zlcxbb/p/5757245.html
https://zhuanlan.zhihu.com/p/113917726
MySQL技术内幕InnoDB存储引擎第2版
高性能mysql(第3版)

相关推荐

《SPARK官方教程系列》(标贝科技)

1-概述Apache Spark是一个用于大规模数据处理的统一分析引擎,它在Java、Scala、Python和R中的提供了高级api,以及一个支持通用执行图[general execution graphs]的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、用于图形处理的GraphX以及用于增量计算和流处理的结构化流。在Spark 2.0之前,Spark的主要编程接口是弹性分布式数据集(RDD)。在Spark 2.0之后,RDDs被D

DataBaker的博客 2863

uni-app多平台融合【入门】(标贝科技)

uni-app多平台融合【入门】一、uni-app介绍uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。二、功能框架从下面uni-app功能框架图可看出,uni-app在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。三、使用工具【推荐】HBuilderX 【官网下载地址:http

DataBaker的博客 2905

Elasticsearch相似度算分TF-IDF BM25(标贝科技)

控制相关度处理结构化数据(比如:时间、数字、字符串、枚举)的数据库,只需检查文档(或关系数据库里的行)是否与查询匹配。布尔的是/非匹配是全文搜索的基础,但不止如此,我们还要知道每个文档与查询的相关度,在全文搜索引擎中不仅需要找到匹配的文档,还需根据它们相关度的高低进行排序。全文相关的公式或 相似算法(similarity algorithms) 会将多个因素合并起来,为每个文档生成一个相关度评分 _score 。这里,我们会验证各种可变部分,然后讨论如何来控制它们。当然,相关度不只与全文查询有关,也

DataBaker的博客 2754

PHP各版本技术特性(标贝科技)

文章目录PHP8JIT流程配置测试小结match表达式PHP7HugepageHugepage简介Hugepage配置Opcache file cacheOpcache file cache简介Opcache file cache配置PHP5Opcache简介安装配置注意事项yield关键字总结PHP8JITPHP8 的 JIT( Just In Time )无疑是新特性中一大亮点, JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PH

DataBaker的博客 937

go-mysql-elasticsearch+mysql 同步 ElasticSearch(标贝科技)

一、Elasticsearch:https://www.elastic.co/downloads/past-releases1、Elasticsearch无需安装,解压即用。2、进入elasticsearch/bin目录,执行./elasticsearh即可启动。3、es 绑定了两个端口:9300:Java程序访问的端口9200:浏览器、postman访问的端口4、浏览器中访问:http://ip:9200 即可二、ik(分词) : https://github.com/medcl/el

DataBaker的博客 4179

白话Android音频系统原理(上)(标贝科技)

白话Android音频系统原理(上)一、基本原理二、初始化准备工作三、播放流程四、录音流程一、基本原理谁来发起(录音和播放)?AudioRecorder,AudioTrack。谁来处理(录音和播放)? AudioFlinger!怎么处理?AudioPolicyService !什么是output?为了便于管理, 把一个设备上具有相同参数的一组播放device组织称为一个output。它描述一些实际支持的设备(有实际硬件)一个output对应一个处理线程thread。二、初始化准备工作从f

DataBaker的博客 500

mysql 锁(标贝科技)

mysql 锁锁类型类型表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低这些存储引擎通过总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁来避免死锁。表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用,如Web 应用行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高最大程度的支持并发,同时也带来了最大的锁开销在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,

DataBaker的博客 2507

Docker概述(二)(标贝科技)

Docker概述(二)文章目录Docker概述(二)前言一、镜像构建与运行二、docker常用命令总结前言本文将介绍Docker镜像的构建、运行以及介绍docker的常用命令一、镜像构建与运行Dockerfile创建Dockerfile常用命令介绍这里以tomcat9.0为例首先下载一个tomcat9.0docker pull tomcat:9.0通常我们启动一个Tomcat容器,官方镜像是简化版的,在webapps 目录下没有任何内容,所有我们启动之后访问主页也是没有任

DataBaker的博客 860

postman安装使用教程(标贝科技)

postman安装使用教程文章目录postman安装使用教程前言一、postman安装二、postman使用前言postman是Chrome浏览器的插件,是一款功能强大的网页调试工具(接口调试神器)一、postman安装1.下载: https://www.postman.com/downloads/2. 安装双击postman应用程序进入到postman主界面,如下证明安装成功3. 界面主要功能介绍二、postman使用1. 状态码解释各位小伙伴可以学习一下关于接口

DataBaker的博客 2万+

Mysql 事务(标贝科技)

文章目录事务InnoDB对ACID的支持隔离级别不同隔离级别下读读取数据可能出现的情况不可重复读和幻读区别redo log (共享表空间)redo log block刷redo log策略:innodb存储引擎中checkpoint:触发逻辑解决问题Log sequence number日志序列号innodb从执行修改语句开始:undo log 日志(共享表空间)记录日志的方式事务InnoDB对ACID的支持特性说明InnoDB支持原子性一个事务(transaction)中的所

DataBaker的博客 1045

srilm的安装与使用(标贝科技)

一、简介简单且概括的来说,SRILM是一个构建和应用统计语言模型的开源工具包,主要用于语音识别,统计标注和切分,以及机器翻译,可运行在UNIX及Windows平台上。(具体概念都能搜索出来,不再赘述,主讲安装和简单使用。)SRILM的主要目标是支持语言模型的估计和评测。二、安装在此,为解决大家下载版本不一致,导致安装出错的问题,提供压缩包下载链接,如下所示:SRILM:链接:https://pan.baidu.com/s/18T474NLSqlBL_xhMKEivnA提取码:adslTCL:链

DataBaker的博客 2270

GMM-HMM声学模型实例详解(标贝科技)

GMM-HMM声学模型实例详解GMM-HMM为经典的声学模型,基于深度神经网络的语音识别技术,其实就是神经网络代替了GMM来对HMM的观察概率进行建模,建模解码等识别流程的格个模块仍然沿用经典的语音识别技术接下来我将从GMM、最大似然估计到EM算法实例,再到最后使用一段语音介绍GMM-HMM声学模型参数更新过程一、GMM (混合高斯分布)1、正态分布(高斯分布)如果你绘制出来的概率分布是一条钟型曲线,且平均值、众数和中位数都是相等的,那么随机变量X就服从正态分布,记为X~N(μ,σ2),正态分布概

DataBaker的博客 4584

基于AudioQueue实现音频的录制和播放(标贝科技)

基于AudioQueue实现音频的录制和播放文章目录基于AudioQueue实现音频的录制和播放背景总览Audio Queue 架构AudioQueueBuffer数据结构创建`AudioQueueBuffer`释放 `AudioQueueBuffer`Buffer Queue 和EnqueuingAudio Queue Callback音频录制创建一个录音 AudioQueue 的示例音频播放播放流程说明通过AudioQueue来控制音频的播放Audio Queue 的控制和状态Audio Queue

DataBaker的博客 923

pytorch模型从训练到LibTorch部署(标贝科技)

pytorch和libtorch安装PyTorch 是Torch7 团队开发的,从它的名字就可以看出,其与Torch 的不同之处在于PyTorch 使用了Python 作为开发语言。所谓“Python first”,同样说明它是一个以Python 优先的深度学习框架,不仅能够实现强大的GPU 加速,同时还支持动态神经网络,这是现在很多主流框架比如Tensorflow 等都不支持的。  PyTorch 既可以看做加入了GPU 支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络,除了F

DataBaker的博客 3454

Docker概述(一)(标贝科技)

docker系列文章(一)第一章docker概述与安装文章目录docker系列文章(一)前言一、docker概述二、使用步骤1.引入库2.读入数据总结前言此系列文章将详细介绍docker的原理及使用一、docker概述docker是什么?docker是目前使用最广泛的开源容器引擎,是一种操作系统级的虚拟化技术,一个简单的应用程序打包工具为什么要使用容器?上线流程繁琐 —> 资源利用率低 —> 程序扩容不及时 —> 服务器环境臃肿 —> 服务所需环境不

DataBaker的博客 1674

Mysql整体介绍(适用于5.X版本)(下)(标贝科技)

Mysql整体介绍(适用于5.X版本)(下)(标贝科技)二、InnoDB介绍[9-11]InnoDB是Mysql取得成功的最关键的引擎,其重要性不言而喻,下面将单独对该引擎的核心特性进行介绍,其他引擎如MyISAM、MEMORY、NDB等,本文不作说明。本文主要从宏观角度整体性地对InnoDB进行介绍,索引、事务、锁等具体的知识点在后续文章单独介绍。2.1 InnoDB体系架构和关键技术在MySQL 5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可将其视为老版本的In

DataBaker的博客 1315

免费公测 标贝声音理解,检测声音性别和年龄

古有听声辨位,今有听声“识”人。说到声音,其本质是不同频率声音的集合,以波的形式振动(震动)传播。由于每个人的发声器官(口腔、鼻腔、声带)各不相同,因此每个人的声音也不一样。因而,你的声音代表了个人很多关键信息,例如,性别、年龄、音色等特征。前几年,韩国大热的刑侦剧《Voice》里,女主是一个报警中心电话接听员,天生听力过人,不仅能听到很多常人听不到的细小微弱的声音,还能分辨出人讲话的声音、物体碰撞的声音、环境背景音等,靠着这个听声辨物的“超能力”,女主通过现场声音,准确的分辨人、物、地点,帮助组员破获了

DataBaker的博客 1115

Mysql整体介绍(适用于5.X版本)(上)(标贝科技)

Mysql整体介绍(适用于5.X版本)Mysql 8.X版本和 5.X版本相比,有比较大的调整。目前工作中应用最广的是Mysql 5.6/5.7的版本,所以文章将聚焦于对Mysql 5.6/5.7版本进行介绍,8.X版本的相关改动,有机会再单独整理。一、Mysql体系结构Mysql是一个单进程多线程、基于C/S架构的关系型数据库管理系统,其体系结构如图1所示(图片参考Mysql官方手册,各个版本会进行少许调整,总体上仍是准确的,虚线标出的查询缓存和缓冲区部分在Mysql 8.X版本中已废弃,侧面反映了

DataBaker的博客 1809

kaldi新手入门及语音识别的流程(标贝科技)

kaldi新手入门及语音识别的流程(标贝科技)欢迎体验标贝语音开放平台地址:https://ai.data-baker.com/#/?source=qaz123(注:填写邀请码hi25d7,每日免费调用量还可以翻倍)​​​​​​一、kaldikaldi简介Kaldi是当前最流行的开源的语音识别工具包,旨在提供灵活且可扩展的组件,包括多种语音信号处理,语音识别,声纹识别和深度神经网络。Kaldi的代码主要用C++编写,在此之上使用bash 和python脚本做了一些工具。kaldi安

DataBaker的博客 4158

教你windows下配置java环境变量&idea配置maven库(标贝科技)

安装java环境变量+idea配置maven库(标贝科技)提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录安装java环境变量+idea配置maven库(标贝科技)前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开

DataBaker的博客 677

WeNet 更新:超大规模数据 UIO,支持千万小时语音训练任务(转载自语音杂谈)

转载自语音杂谈 https://mp.weixin.qq.com/s/C6vVQ455g_fVNtRBb9pa7AWeNet 更新:超大规模数据 UIO,支持千万小时语音训练任务近日,WeNet 中更新了超大规模数据 UIO (Unified IO) 支持,可以支持工业级千万小时级别的语音数据训练,支持云存储 OSS/S3/HDFS 等,并且训练速度更快,接口更简单,更容易使用和调试。旧有 IO 方案的问题WeNet 中旧有的 IO 方案基于 Pytorch 原生的 Dataset,在训练时,需要一

DataBaker的博客 1202

教你如何用ffmpeg处理音频格式转换(标贝科技)

文章目录前言ffmpeg介绍?一、下载与安装1.下载安装包2.设置环境变量3.验证是否安装成功二、命令讲解1 参数解释2 音频格式转换命令三、标贝开放平台介绍前言ffmpeg介绍?FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案(本章介绍:ffmpeg的安装及音频转换命令使用)一、下载与安装1.下载安装包ffmpeg官网地址:https://ffmpeg.org/downlo..

DataBaker的博客 8257

手把手教你用JAVA实现“声音复刻”功能(复刻你的声音)标贝科技

手把手教你用JAVA调用websocket实现“语音识别”功能(声音转文字)标贝科技前言什么是语音识别?将自然语音转换为文本信息,本篇文章将介绍“长语音识别”(对长时间持续输入的语音流进行识别,例:视频直播)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:支持音频格式:wav,pcm(Linear pcm)音频采样率:8000Hz,16000Hz位深:16bits声道:单声道时长限制:不超过3小时确认无误后,直接执行 2.2获取权限+2.3.4完整代码示例二、用JAVA调

DataBaker的博客 2197

手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技

手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技前言什么是语音合成?将文本转换成自然流畅的语音,本篇文章将介绍“实时在线合成”(文本长度不得超过1024字节)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:合成音频的格式:PCM合成音频的采样率: 8000Hz,16000Hz支持语言:中文(zh),英文(eng),粤语(cat),四川话(sch)确认无误后,直接执行 2.2获取权限+2.3.4完整代码示例二、用JAVA调用标贝科技“语音合成”接口使用流程2.1

DataBaker的博客 4674

手把手教你用JAVA实现“语音识别”功能(声音转文字)标贝科技

手把手教你用JAVA实现“语音识别”功能(声音转文字)标贝科技前言什么是语音识别?将自然语音转换为文本信息,本篇文章将介绍“一句话识别”(对60秒以内的语音进行实时转写识别)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:时长限制:60秒以内支持音频格式:wav,pcm音频采样率:8000Hz,16000Hz位深:16bits声道:单声道确认无误后,直接执行 2.2获取权限+2.3.3完整代码示例二、用JAVA调用标贝科技“语音识别”接口使用流程2.1.环境准备jav

DataBaker的博客 6156

手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)标贝科技

手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)前言什么是声音转换?基于深度学习和迁移学习技术,精准将原说话人的声音转换为目标说话人,同时保留原说话人的风格特色。让声音有更多的表现形式。一、内容太长不愿意看,直接使用系列首先确认接口调用要求:实现方式:Websocket支持音频文件的编码格式及文件名的后缀: pcm支持音频文件的采样率/位深: 16000Hz/16bit支持的语言:中文普通话音频有效时长:不超过180分钟确认无误后,直接执行 2.2获取权限+2

DataBaker的博客 1347

WAV2VEC:针对语音识别的无监督预训练

WAV2VEC: UNSUPERVISED PRE-TRAINING FOR SPEECH RECOGNITION概要本文使用大量的无标签数据集去预训练wav2vec模型,从而提升声学模型效果。本文训练的模型在性能上超越了Deep Speech 2,在nov92测试集上,WER达到了2.43%。1 简介预训练在深度学习算法中是一个很常用的方法,主要作用是能提升模型性能,即使是在当前带标签数据集的很少的情况下。主要方法是通过大量的无标签数据或者有标签的其他数据集对模型进行训练,可以使模型学习到通用的特

DataBaker的博客 3286

MFCC特征介绍

MFCC特征介绍在语音识别技术中,需要提取音频的特征,然后就可以使用该音频进行模型的训练或者是进行识别,目前很常用的一种特征叫做MFCC特征,又叫做梅尔倒谱系数特征。MFCC特征保留了语义相关的一些内容,过滤掉了诸如背景杂音等无关的信息。MFCC的特点是使用一组用来创建梅尔倒谱的关键系数,这样使得它的倒频谱和人类非线性的听觉系统更为接近。具体步骤如下:对音频信号进行分帧加窗将信号进行傅里叶变换将频谱映射到梅尔刻度取对数进行DCT变换为什么要对音频信号进行分帧加窗?因为音频信号本身是非平

DataBaker的博客 5729

Self-training and Pre-training are Complementary for Speech Recognition自训练和与预训练在语音识别中的互补

Self-training and Pre-training are Complementary for Speech Recognition自训练和与预训练在语音识别中的互补简介self-training和无监督的预训练可以互补,用来优化语音识别系统,但是还不清楚他们是否学习到了详细的patterns或者如何将他们有效的结合。本文仅使用了10分钟的带标签的数据(Libri-light)和5,300小时的无标签数据(LibriVox)进行训练,在Librispeech的clean和other的数据集上W

DataBaker的博客 670

手把手Python调用websocket接口实现实时语音合成,文字转语音

手把手使用Python进行语音合成,文字转语音0. 太长不看系列,直接使用1. Python调用标贝科技语音合成接口,实现文字转语音1.1 环境准备:1.2 获取权限1.2.1 登录1.2.2 创建新应用1.2.3 选择服务1.2.4 获取Key&Secret2. 代码实现2.1 获取access_token2.2 准备数据2.3 配置接口参数2.4 建立websocket客户端2.5 执行0. 太长不看系列,直接使用在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.5de

DataBaker的博客 1503
上一篇: 基于AudioQueue实现音频的录制和播放(标贝科技)
下一篇: GMM-HMM声学模型实例详解(标贝科技)
DataBaker标贝科技
DataBaker标贝科技 标贝科技官方账号 标贝科技官方账号
博客等级 码龄5年 39粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值