BTree

MySQL:从什么是索引,到运用索引(程序员进阶)

好久不见. 提交于 2020-08-10 23:31:43
什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。 可以通俗的反过来理解索引: 你要看某一本书里的某一章节里的内容,如果没有目录的话,你是不是要从头开始看着找呢,如果恰巧你想要看的章节内容又是在最后的那几页,你是不是要把书看着翻到最后呢,这效率甭想也知道很低,如果有了目录那就好办多了,你要看书里的某一内容,不用从头翻一遍,你按着目录里的章节去找对应内容就好了。 技术光谈理论不实践都是耍流氓,那么我们来看看具体有哪些索引和对索引的操作 单值索引—— 即一个索引只包含单个列,一个表可以有uoge单列索引。 唯一索引—— 索引列的值必须唯一,但允许有空值。 复合索引—— 一个索引包含多个列。 全文索引—— 只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引 在做索引之前我们先创建足够多数据,这样才能更好的看到索引效果,那么可以用上我们的存储过程创建300万条数据来玩(记住是300百万条不是3000万条,注意不要多个0,不然真的有得等,上一篇文章翻过车,说多都是泪,我放下面了,这里就不赘述) 教你使用MySQL仅调用一个存储过程创建三千万条数据 你看创建300百万条数据也要9分钟多,何况3000万条… 没有建立索引之前

【数据结构】 & 一篇搞定

谁说胖子不能爱 提交于 2020-08-10 22:06:13
前言:之前更新了最实用的一些算法demo,结束之后本篇准备以入门的姿态讲下数据结构,方便更好的理解一些基础代码,以及原理情况 希望这篇可以帮你理解数据结构的大部分内容 数据结构 1. 栈(stack) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。 它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈)两种, 前者相当于插入,后者相当于删除最后的元素。 我们常用的叫法有 加载->进栈,压栈 || 释放->出栈,弹栈 2. 队列(queue) 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的 后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为 队尾,进行删除操作的端称为队头。 3. 链表(Link) 链表是一种数据结构,和数组同级。比如,Java 中我们使用的 ArrayList,其实现原理是数组。而 LinkedList 的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。 具体又分为: 单链表,双链表,循环列表 4. 散列表(Hash Table) 散列表(Hash table,也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法 在查找时不需要进行一系列和关键字

MySQL的存储引擎InnoDB选择了B+ 树

萝らか妹 提交于 2020-08-10 18:11:40
我们知道数据的存储和检索是两个很重要的功能,当我们的数据量大了,怎么能快速的检索数据呢,答案是使用索引,可索引具体的技术实现有很多,选择哪一种呢,我就以mysql为例记录下它为什么选择了B+树作为索引的实现方式。 1. 索引简介    索引是一种用于快速查询行的数据结构 ,就像一本书的目录就是一个索引,如果想在一本书中找到某个主题,一般会先找到对应页码。 MySQL 官方对索引的定义为:索引( Index )是帮助 MySQL 高效获取数据的数据结构。提取句子主干,就可以得到索引的本质: 索引是数据结构 。 2. 索引的几种数据结构类型 2.1 哈希索引(hash index) 哈希索引(hash index)基于哈希表(也可以叫散列表)实现 ,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。 下面举个小例子 它能快速的检索数据,不过在mysql数据库却有局限: a): 哈希索引数据并不是按照索引值顺序存储的,所以无法用来进行排序; b): 不能进行多列字段查询数据; c): 更不支持范围查询,比如查询年龄大于30,。 d): 有大量重复键值的情况下,哈希索引的效率也是极低的

MySQL的基础、开发、优化

不打扰是莪最后的温柔 提交于 2020-08-10 09:39:16
数据库MySQL的基础、开发、优化笔记 文章目录 一、基础 1.SQL基础 查找操作语法,函数 2.MySQL数据类型 2.1数值类型 2.2日期时间类型 2.3字符串类型 3.MySQL中运算符 3.1算术运算符 3.2比较运算符 3.3 逻辑运算符 4.常用函数 4.1字符串函数 4.2数值函数 4.3流程函数 4.4常用函数 二、开发 1.表类型(存储引擎)的选择 1.1 InnoDB存储引擎 1.2 MyISAM存储引擎 2.数据类型选择 2.1 CHAR、VARCHAR 2.2 TEXT、BLOB 2.3 浮点数和定点数 3.字符集 4.索引的设计和使用 三、优化 1.优化sql的一般步骤 2.索引 1.索引的分类 BreakPoint 一、基础 1.SQL基础 DDL: data definition language (数据定义语言) -- 数据库的基本操作 create database test1 ; show databases ; use test1 ; drop database test1 ; -- 数据表的基本操作 show tables ; create table tablename ( col_name1 col_type_contraints col_name2 col_type_contraints ) -- 得到数据表的详细信息 desc

面试官常考的MySQL索引(MySQL进阶)

邮差的信 提交于 2020-08-09 20:30:22
你好我是辰兮,很高兴你能来阅读,本篇是整理了索引基础学习的相关知识点,带你认识了解索引的数据结构,实现原理,分享获取新知,希望对你有帮助,一起加油,共同进步。 1.JAVA基础面试常考问题 : JAVA面试基础常考题汇集 2.JAVA面试SSM框架常考 : JAVA框架面试题汇集 文章目录 一、索引定义 二、索引分类 三、索引原理 四、索引数据结构 一、索引定义 MySQL官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构。 作用: 可以提高查询效率。 关键词:数据结构 用来提高查询效率 二、索引分类 索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引。MyISAM和InnoDB存储引擎:只支持BTREE索引,也就是说默认使用BTREE,不能够更换。MEMORY/HEAP存储引擎:支持HASH和BTREE索引。 mysql的索引我们分为三大类来讲单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引。 索引名称 作用 主键索引 主键是一种唯一性索引,但它 必须指定为PRIMARY KEY ,每个表只能有一个主键 唯一索引 索引列的所有值都 只能出现一次 ,即必须唯一,值可以为空 普通索引 基本的索引类型, 值可以为空 ,没有唯一性的限制 全文索引 全文索引的索引类型为FULLTEXT 全文索引可以在varchar、char

PostgreSQL 12.2 公开课及视频及PGCE认证(第11期)(CUUG)(2020年)

孤者浪人 提交于 2020-08-09 18:08:40
十一、PostgreSQL 12.2 9种索引的原理和应用场景及维护 1、PG数据库众多开放特性概述 2、btree、hash、gin、gist、sp-gist、brin、bloom、rum、zombodb各种索引原理和应用场景 3、各种索引维护时有用的查询集锦 4、索引调优案例 本次线上技术沙龙介绍PG数据库各种索引类型与应用,涵盖最常用的9种索引类型,从知识普及到深入了解再到调优应用,为大家献上一场简约而不失内涵的盛宴。 手把青苗插满田,低头便见水中天,六根清净方为道,退步原来是向前。 时间:2020-05-23 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。 来源: oschina 链接: https://my.oschina.net/u/3902946/blog/4287094

MySQL索引

我的未来我决定 提交于 2020-08-08 19:34:05
一.什么是索引 索引是一种数据结构,能够帮助我们快速的检索数据库中的数据。 二.相关概念 1.索引分类 1)从存储结构上划分: 哈希索引 Btree索引 2)从应用层次上划分: 普通索引:一个索引只包含一列数据 唯一索引:索引值必须唯一,可以有空值 复合(联合)索引:包含多个列的索引 3)从存储方式上划分: 聚集索引:表中数据的顺序和索引顺序一致 非聚集索引:和索引不一致 2.聚集索引和非聚集索引 聚集索引和非聚集索引并不是真正的索引类型,而是一种数据存储的方式。InnoDB用的是聚集索引,而myISAM用的是非聚集索引 。 简单来说,聚集索引就是 以主键创建的索引 ,又称为主键索引。一张数据表只能建立一个聚集索引,而该表中数据的排序方式和索引排序方式相同。它的底层是B+树,叶子节点的data域就是行数据。 而非聚集索引是非主键建立的索引,一张表中可以有多个非聚集索引,像是普通索引,联合索引都属于非聚集索引,它的叶子节点存储的是索引值和主键,所以当一般查询时首先会查到对应的叶子节点,然后根据主键值去聚集索引中查找相应数据,这也称为 回表 (当然有特殊情况:覆盖索引)。 覆盖索引:对要查询的列建立索引,这样一次查询到索引就是我们要找的数据了,不需要再去主键索引中查找。 三.底层结构 哈希索引:利用哈希算法,将键值转换为哈希值再来定位。 跟B+树相比: 1.只能进行等值查找

mysql count(*) count(1) count(id) 讲解 千万数据测试

為{幸葍}努か 提交于 2020-08-08 16:53:06
数据100万增加到 1000万测试数据 环境 win10 8g内存 mysql5.7.27 mysql my.ini 配置 注意(innodb_flush_log_at_trx_commit=0)配置 [Client] #设置3306端口 port = 3306 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=E:devmysql-5.7.27-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:devmysql-5.7.27-winx64data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 插入数据时设置为0提高插入数据,插入数据完成修改为1 innodb_flush_log_at_trx_commit=0 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 1、创建表 CREATE TABLE `test_count

mysql的索引底层原理详解

断了今生、忘了曾经 提交于 2020-08-08 12:14:27
参考文章: mysql的索引底层原理 什么是索引 概念:索引是提高mysql查询效率的数据结构。总的一句话概括就是索引是一种数据结构。 数据库查询是数据库的最主要功能之一。设计者们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如:有顺序查找、折半查找、快速查找等。 但是每种查找算法都只能应用于特定的数据结构之上,例如顺序查找依赖于顺序结构,折半查找通过二叉查找树或红黑树实现二分搜索。因此在数据之外,数据库系统还维护着满足特定查找算法的数据结构。这种数据结构,就是索引。 Mysql索引原理 目前大多数数据库系统及文件系统都采用 B-Tree 或其变种 B+Tree 作为索引结构。B+ 树索引是 B+ 树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。 从最早的平衡二叉树演化而来的。B+ 树是由二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)逐步优化而来。 那么为什么mysql的索引选择B+数呢? 红黑树也可以作为数据结构也可以用来实现索引,但是文件系统以及数据库系统普遍采用B树或者B+树,这里结合计算的组成原理来深入的分析。 一般来说

B树、B-树、B+树、B*树的定义和区分

落爺英雄遲暮 提交于 2020-08-07 21:38:42
参考文章: B树、B-树、B+树、B*树之间的关系 B树 B-tree 树即 B树 ,B即 Balanced ,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生 误解 。如 人们 可能会以为B-树是一种树,而B树又是另一种树。而事实上是, B-tree就是指的B树 。特此说明。 先介绍下二叉搜索树 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: 二叉搜索树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果二叉搜索树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变二叉搜索树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销; 如: 但二叉搜索树在经过多次插入与删除后,有可能导致不同的结构: 右边也是一个二叉搜索树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以