BTree

赞!7000 字学习笔记,一天搞定 MySQL

久未见 提交于 2020-07-28 01:57:29
MySQL数据库简介 MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制也是逐渐成熟,更重要的是开源免费的。 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 如果不会安装MySQL请移步: MySQL服务安装 MySQL InnoDB存储引擎 存储引擎InnoDB是目前MySQL版本默认的存储引擎,也是MySQL推荐使用的存储引擎,是集高可靠性和高性能于一身的存储引擎。 在MySQL5.7版本中,除非在配置文件中显视指定default storage engine或者创建表时显视使用engine=语句指定其它的存储引擎,否则默认都是InnoDB。 InnoDB存储引擎的优势: DML语句支持事务功能,保证ACID特性 行级锁的使用保证了高并发的属性 InnoDB对有主键的表会依据主键优化查询性能,也称聚簇索引,将所有数据存储在聚簇索引上以减少对主键查询的IO消耗 为保证数据的一致性

用了这么多年MySql,这些好习惯你用过哪些

三世轮回 提交于 2020-07-27 07:07:39
一:新建表和字段建议: 1.所有数据表和字段要有清晰的注释,字段说明   说明:不管是创建者还是其他开发或者后续维护者都能清楚知道数据表和字段定义的含义 2.表名、字段名使用小写字母或数字,禁止出现数字开头   说明:MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写,为了避免出现不必要的麻烦,统一使用小写 3.每个列都设置为not null(如果列为BLOB/TEXT类型的,则这个列不能设置为NOT NULL),且定义默认值   说明:3.1:NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回非空行的结果集   3.2:使用 concat 函数拼接时,首先要对各个字段进行非 NULL 判断,否则只要任何一个字段为空都会造成拼接的结果为 NULL   3.3:当用count函数进行统计时,NULL 列不会计入统计   3.4:因为NULL的列使得索引,索引统计和值比较都更复杂,可为NULL的列会使用更多的存储空间,在mysql里也需要特殊处理,当可为NULL的列被索引时,每个索引记录需要一个额外的字节,如果计划在列上建索引,应该避免将列设计为NULL。 4.每个表有自增列id且为主键,使用无符号类型unsigned,不作业务逻辑使用   说明:4.1:避免存储负值,且扩大了表示范围   4.2:如果使用非自增主键(如果身份证号或学号等)

Mysql数据库理论基础之四 --- 表和索引的管理

最后都变了- 提交于 2020-07-27 00:00:00
一、简介 由MySQL AB公司开发,是 最流行的开放源码SQL数据库管理系统,主要特点: 1、是一种数据库管理系统 2、是一种关联数据库管理系统 3、是一种开放源码软件,且有大量可用的共享MySQL软件 4、MySQL数据库服务器具有快速、可靠和易于使用的特点 5、MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 二、MySQL 存储引擎,也称表类型 2.1. 单字段: PRIMARY KEY 主键 UNIQUE KEY 唯一键 2.2 单或者多字段: PRIMARY KEY(col,...) UNIQUE KEY(col,...) INDEX(col,...) 2.3 数据类型: BIT [(length)] 比特 | TINYINT [(length)] [UNSIGNED] [ZEROFILL] 非常小的整数(1字节) | SMALLINT [(length)] [UNSIGNED] [ZEROFILL] 小的整数(2字节) | MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL] 中等的整数(3字节) | INT [(length)] [UNSIGNED] [ZEROFILL] 整数(4字节) | INTEGER [(length)] [UNSIGNED] [ZEROFILL] 整数(4字节)相当于INT | BIGINT [

Redis持久化的四种方式(转)

会有一股神秘感。 提交于 2020-07-24 20:09:04
Redis 是一个支持持久化的内存 数据库 ,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。下面分别介绍之。 (一)Snapshotting 快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置: save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 save 300 10 #300秒内容如超过10个key被修改,则发起快照保存 save 60 10000 快照保存过程: 1. redis调用fork,现在有了子进程和父进程。 2. 父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照。 3. 当子进程将快照写入临时文件完毕后

MySQL数据库操作规范

*爱你&永不变心* 提交于 2020-07-23 18:47:03
MySQL数据库操作规范 文档说明: 该文档旨在对MySQL数据库的使用做一个统一的约定和规范;以便使大家更明确、更有效的用好数据库,最终使数据库发挥更好的作用,从而提升产品的质量。 一、基础规范 1.1、【强制】使用InnoDB存储引擎。 解读:InnoDB存储引擎是MySQL默认存储引擎,支持事务和行级锁,并发性能更好,CPU及内存缓存页优化使得资源利用率更高,并且MyISAM在8.0中考虑移除了。 1.2、【强制】使用统一的字符集(utf8或utf8mb4),如果有存储emoji表情之类的,则需要使用utf8mb4,否则使用utf8即可。 解读:无需转码,无乱码风险;utf8mb4向下兼容utf8但存储使用的空间会比utf8略大。 1.3、【强制】表、字段必须加入中文注释,注释要言简意赅。 解读:便于识别表和字段的用途,有利于维护; 反例:t_company_organization_scope_employee 可以采用缩写改成t_com_org_scope_emp 1.4、【强制】禁止使用存储过程、视图、触发器、Event。 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移到业务层

二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比

China☆狼群 提交于 2020-05-06 08:07:39
转载:https://blog.csdn.net/z702143700/article/details/49079107 前言:BST、AVL、RBT、B-tree都是动态结构,查找时间基本都在O(longN)数量级上。下面做出详细对比。 1. 二叉查找树 (Binary Search Tree) BST 的操作代价分析: (1) 查找代价: 任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。 当树中每个结点左右子树高度大致相同时,树高为logN。则平均查找长度与logN成正比,查找的平均时间复杂度在O(logN)数量级上。 当先后插入的关键字有序时,BST退化成单支树结构。此时树高n。平均查找长度为(n+1)/2,查找的平均时间复杂度在O(N)数量级上。 (2) 插入代价: 新结点插入到树的叶子上,完全不需要改变树中原有结点的组织结构。插入一个结点的代价与查找一个不存在的数据的代价完全相同。 (3) 删除代价: 当删除一个结点P,首先需要定位到这个结点P,这个过程需要一个查找的代价。然后稍微改变一下树的形态。如果被删除结点的左、右子树只有一个存在,则改变形态的代价仅为O(1)。如果被删除结点的左、右子树均存在,只需要将当P的左孩子的右孩子的右孩子的…的右叶子结点与P互换,在改变一些左右子树即可。

Mysql聚簇索引和非聚簇索引原理(数据库)

时光总嘲笑我的痴心妄想 提交于 2020-05-06 03:35:28
本文链接:https://blog.csdn.net/lisuyibmd/article/details/53004848 一、‘页’和操作系统的关系 ①为什么要有内存管理? 我们知道,一个进程完成他的功能,需要访问磁盘加载数据到内存然后等待进入cpu运算,因为数据量大小远远大于内存大小。因此提出虚拟内存概念。虚拟内存就是将程序用到的数据进行划分,暂时用不到的放到磁盘里,用到的放到内存里,操作系统中总是运行着不止一个进程,各个进程有优先级顺序,所以存在进程调度问题,进程的每次调度都会导致内存和磁盘数据置换,段式内存管理页式内存管理都是基于虚拟内存概念的具体内存管理解决方案。 ②什么是页式内存管理? 虚拟内存位于程序和物理内存之间,程序只能看见虚拟内存,再也不能直接访问物理内存。每个程序都有自己独立的进程地址空间,这样就做到了进程隔离。这里的进程地址空间是指虚拟地址。顾名思义,既然是虚拟地址,也就是虚的,不是现实存在的地址空间。既然我们在程序和物理地址空间之间增加了虚拟地址,那么就要解决怎么从虚拟地址映射到物理地址,因为程序最终肯定是运行在物理内存中的,主要有分段和分页两种技术。 分页机制就是把内存地址空间分为若干个很小的固定大小的页,每一页的大小由内存决定,就像Linux中ext文件系统将磁盘分成若干个Block一样,这样做是分别是为了提高内存和磁盘的利用率。

MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引

倾然丶 夕夏残阳落幕 提交于 2020-05-06 02:26:11
本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一、视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可。 如果要频繁使用一张虚拟表,可以不用重复查询 视图使用方法: -- 将表1与表2通过on后面的条件进行内连接,产生的新表 就是我们创建的视图表 create view 视图表名 as select * from 表1 inner join 表2 on 内连接条件 具体示例: 先建基础数据表及其记录(由于博客园暂找不到上传文件的地方,所以只能插入创建表的sql语句,将其复制粘贴到txt文档里面,最好是notpad++里面,然后存为sql文件,在Navicat里面导入就行了) /* Navicat Premium Data Transfer Source Server : sgt'mysql Source Server Type : MySQL Source Server

Java 开发 MySQL 数据库规约

怎甘沉沦 提交于 2020-05-05 19:45:03
目录 Java 开发 MySQL 数据库规约 1. 建表规约 2. 索引规约 3. SQL 语句 4. ORM 映射 Java 开发 MySQL 数据库规约 1. 建表规约 No. 要求 1 【强制】 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否)。 说明:任何字段如果为非负数,必须是 unsigned。 注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在 <resultMap> 设置从 is_xxx 到 Xxx 的映射关系。数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的命名方式是为了明确其取值含义与取值范围。 正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。 2 【强制】 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字 。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例:aliyun_admin,rdc_config,level3_name 反例:AliyunAdmin

mysql的索引

假装没事ソ 提交于 2020-05-04 15:46:37
什么是索引 帮助Mysql高效获取数据的数据结构 索引就是数据结构 类似新华字典的索引目录,可以通过索引目录快速查到你想要的字 排好序的快速查找数据 为什么要建立索引 提高查询效率 没有排序之前一个一个往后找 通过索引进行排序之后,可以直接定义到想要的位置 排好序的快速查找数据结构-->就是索引 优势 索引类似大学图书馆建立的书目索引,提高数据检索的效率,降低数据库的IO成本 通过索引对数据项进行排序,降低数据排序成本,降低了CPU的消耗 劣势 一般来说, 索引本身也很大, 索引往往以文件的形式存储到磁盘上 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.所以索3引也是要占磁盘空间的 虽然索引提高了查询速度,但是会降低更新表的速度. 因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段, 会调整因为更新所带来的键值变化后索引的信息 索引分类 单值索引 一个索引只包含间个列,一个表可以有多个单值索引 一般来说, 一个表建立索引不要超过5个 唯一索引 索引列的值必须唯一,但允许有空值 复合索引 一个索引包含多个列 全文索引 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索, 可以利用全文索引来提高匹配的速度。 索引为什么能快速查找数据 二叉查找树 B-Tree B+Tree 基本语法 创建索引 create