BTree

MYSQL5.7 INDEXES之如何使用索引(一)

痞子三分冷 提交于 2020-05-04 04:29:27
Most MySQL indexes ( PRIMARY KEY , UNIQUE , INDEX , and FULLTEXT ) are stored in B-trees . Exceptions: Indexes on spatial data types use R-trees; MEMORY tables also support hash indexes ; InnoDB uses inverted lists for FULLTEXT indexes B-Tree A tree data structure that is popular for use in database indexes. The structure is kept sorted at all times, enabling fast lookup for exact matches (equals operator) and ranges (for example, greater than, less than, and BETWEEN operators). This type of index is available for most storage engines, such as InnoDB and MyISAM . Because B-tree nodes can have

Mysql Hash索引和B-Tree索引区别(Comparison of B-Tree and Hash Indexes)

情到浓时终转凉″ 提交于 2020-05-04 03:21:16
  上篇文章中说道,Mysql中的Btree索引和Hash索引的区别,没做展开描述,今天有空,上Mysql官方文档找到了相关答案,看完之后,针对两者的区别做如下总结:   引用维基百科上的描述,来解释一下这两种数据结构,这些知识在《数据结构与算法》这门课程中也有讲述:   在计算机科学中, B树 ( 英语: B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree)一个节点可以拥有最少2个子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。B树减少定位记录时所经历的中间过程,从而加快存取速度。B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。   什么是HASH数据结构:   散列表 ( Hash table ,也叫 哈希表 ),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做 散列表 。 一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名 {\displaystyle x

关于Mysql 的 ICP、MRR、BKA等特性

℡╲_俬逩灬. 提交于 2020-05-02 19:41:19
一、ICP( Index_Condition_Pushdown) 对 where 中过滤条件的处理,根据索引使用情况分成了三种:(何登成) index key, index filter, table filter 如果WHERE条件可以使用索引,MySQL 会把这部分过滤操作放到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出。ICP能减少Server层访问存储引擎的次数和引擎层访问基表的次数。 session级别设置:set optimizer_switch="index_condition_pushdown=on 对于InnoDB表,ICP只适用于辅助索引 当使用ICP优化时,执行计划的Extra列显示Using index condition提示 不支持主建索引的ICP(对于Innodb的聚集索引,完整的记录已经被读取到Innodb Buffer,此时使用ICP并不能降低IO操作) 当 SQL 使用覆盖索引时但只检索部分数据时,ICP 无法使用 ICP的加速效果取决于在存储引擎内通过ICP筛选掉的数据的比例 index_condition_pushdown会大大减少行锁的个数,如select for update, 因为行锁是在引擎层的 例如: 现在的索引 show index from sm_performance_all; + -- --------------

今天会是有offer的一天么-简单谈一谈为什么B+树适合做为索引结构

梦想的初衷 提交于 2020-05-02 17:38:55
写在前面 我们知道在mysql中主要存在两种索引结构,第一种是B+树索引,第二种是Hash索引。那么先说一下什么是索引呢?为什么要使用索引呢? 索引(Index)是帮助数据库高效获取数据的一种数据结构,因为我们知道对于一个数据库而言,查询操作是最经常使用的操作,我们肯定希望查找的速度越快越好。例如说随着数据的增加,我们有10000条学生信息,假如我们要查找姓名以“张”开头的学生的详细信息,如果没有索引,我们就需要将这10000条数据中每一条数据都进行一次比较判断。当然这是一万条数据,如果是十万或者一百万甚至更多呢?这个代价肯定是非常大的,所以我们引入了索引这种结构。 Hash索引 在mysql中只有Memory存储引擎默认使用Hash索引。对于单条记录而言,Hash索引的查找是非常快的。因为Hash索引是使用Hash的结构存储索引,每一个键只对应一个值,可以一次定位。但要注意一点:Hash索引是不支持范围查找的。因此如果只是查找单条记录,Hash索引是一种比较好的选择;但如果我们要进行范围查找,例如查找年龄在15到18之间的学生信息,Hash索引就不是最好的选择了。 B+树索引 B+树索引是MySql中最常用的索引结构,Inodb存储引擎和MyISAM存储引擎默认都是使用B+树索引。B+树索引虽然说单条记录的查询速度比不上Hash索引,但它可以支持范围查询,要注意的是B

大厂高频Mysql面试题

大兔子大兔子 提交于 2020-05-02 08:49:21
前言 前几天有读者找到我,说想要一套全面的Mysql面试题,今天陈某特地为她写了一篇。 文章的目录如下: Mysql面试题 什么是SQL? 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。 作用:用于存取数据、查询、更新和管理关系数据库系统。 什么是MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。 数据库三大范式是什么? 第一范式 :每个列都不可以再拆分。 第二范式 :在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式 :在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。 mysql有关权限的表都有哪几个? MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql

同事埋了个坑:Insert into select语句把生产服务器炸了

不问归期 提交于 2020-04-28 11:36:58
Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。 但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。 通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太棒了。然后他就被开除了。 事故发生的经过 由于数据数据库中order_today数据量过大,当时好像有700W了并且每天在以30W的速度增加。所以上司命令xxx将order_today内的部分数据迁移到order_record中,并将order_today中的数据删除。这样来降低order_today表中的数据量。 由于考虑到会占用数据库I/O,为了不影响业务,计划是9:00以后开始迁移,但是xxx在8:00的时候,尝试迁移了少部分数据(1000条),觉得没啥问题,就开始考虑大批量迁移。 在迁移的过程中,应急群是先反应有小部分用户出现支付失败,随后反应大批用户出现支付失败的情况,以及初始化订单失败的情况,同时腾讯也开始报警。 然后xxx就慌了,立即停止了迁移。 本以为停止迁移就就可以恢复了,但是并没有。后面发生的你们可以脑补一下。 事故还原 在本地建立一个精简版的数据库,并生成了100w的数据

MySQL与PostgreSQL相比哪个更好?

≯℡__Kan透↙ 提交于 2020-04-28 02:03:18
网上已经有很多拿PostgreSQL与MySQL比较的文章了,这篇文章只是对一些重要的信息进行下梳理。在开始分析前,先来看下这两张图: MySQL MySQL声称自己是最流行的开源数据库。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL,如WordPress、Drupal等大多数php开源程序。MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有一些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,由于MySQL被控制在Oracle,社区担心会对MySQL的开源会有影响,所以开发了一些分支,比如: MariaDB和Percona。 PostgreSQL PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版

细说mysql索引

≡放荡痞女 提交于 2020-04-26 17:01:17
https://www.cnblogs.com/chenshishuo/p/5030029.html 本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = 'css' 一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css'的数据,是不是感觉性能提升了好多咧.... mysql的索引分为单列索引(主键索引,唯索引,普通索引)和组合索引. 单列索引:一个索引只包含一个列,一个表可以有多个单列索引. 组合索引:一个组合索引包含两个或两个以上的列, 本文使用的案例的表 CREATE TABLE `award` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `aty_id` varchar(100) NOT NULL DEFAULT '' COMMENT '活动场景id', `nickname` varchar(12) NOT

细说mysql索引

青春壹個敷衍的年華 提交于 2020-04-26 16:02:26
https://www.cnblogs.com/chenshishuo/p/5030029.html 本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = 'css' 一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css'的数据,是不是感觉性能提升了好多咧.... mysql的索引分为单列索引(主键索引,唯索引,普通索引)和组合索引. 单列索引:一个索引只包含一个列,一个表可以有多个单列索引. 组合索引:一个组合索引包含两个或两个以上的列, 本文使用的案例的表 CREATE TABLE `award` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `aty_id` varchar(100) NOT NULL DEFAULT '' COMMENT '活动场景id', `nickname` varchar(12) NOT

B树和B+树索引原理

梦想与她 提交于 2020-04-24 13:02:03
总结一下B树和B+树在不同是数据库系统中的应用。 一、B树和B+树 1.1 B树 B-Tree,即B树或者B-树。 一棵 m 阶的 B 树,需要满足下列条件: 1. 定义任意非叶子结点最多只有M个儿子,且M>2; 2. 根结点的儿子数为[2, M]; 3. 除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整; 4. 非叶子结点的关键字个数=儿子数-1; 5. 所有叶子结点位于同一层; 6. k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足查找树的大小关系。 B树的一些特点: 1. 关键字集合分布在整颗树中; 2. 任何一个关键字出现且只出现在一个结点中; 3. 搜索有可能在非叶子结点结束; 4. 其搜索性能等价于在关键字全集内做一次二分查找; 从上图可以看出,key 为 50 的节点就在第一层,B-树只需要一次磁盘 来源: oschina 链接: https://my.oschina.net/u/4342648/blog/3652172