数据库主键

04.深入浅出索引(上)

二次信任 提交于 2019-12-09 13:31:07
简单来说,索引的出现就是为了提高数据查询效率,就像书的目录一样。 索引的常见模型 索引实现的方式有很多种,所以这里就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,比较常见的数据结果有以下三种:哈希表、有序数组和搜索树。 哈希表是一种以键值存储数据的结构,我们只要输入待查找的值即key,就可以找到对应的值即Value。哈希的思路很简单,把值放到一个数据里,用一个哈希函数把Key换算成一个确定的位置,然后把value放在数组的这个位置上。不可避免的,多个key通过哈希函数的换算,会出现同一个值的情况,处理这种情况的方法是,拉出一个链表。所以哈希表这种结构适用于只有等值查询的场景。 有序数据在等值查询和范围查询场景中的性能就都非常优秀,但是在需要更新数据的时候就麻烦了,你往中间插入一条记录,就必须行挪动后面所有的记录,成本太高。 二叉搜索树:每个节点的左儿子小于父节点,父节点又小于右儿子,查询的时间复杂度为O(log(N)),数据库存储大多不使用二叉树,因为树高过高。一般使用N叉树。 InnoDB的索引模型 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,又因为InnoDB使用了B+树索引模型,所以数据都是存储在B+树中。每一个索引在InnoDB里面对应一棵B+树。(为什么InnoDB选择B+树,因为B+树能够很好地配合磁盘的读写特性

深入浅出索引(上)

 ̄綄美尐妖づ 提交于 2019-12-07 22:38:29
南宁SEO :简单来说,索引的出现就是为了提高数据查询效率,就像书的目录一样。 索引的常见模型 索引实现的方式有很多种,所以这里就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,比较常见的数据结果有以下三种:哈希表、有序数组和搜索树。 哈希表是一种以键值存储数据的结构,我们只要输入待查找的值即key,就可以找到对应的值即Value。哈希的思路很简单,把值放到一个数据里,用一个哈希函数把Key换算成一个确定的位置,然后把value放在数组的这个位置上。不可避免的,多个key通过哈希函数的换算,会出现同一个值的情况,处理这种情况的方法是,拉出一个链表。所以哈希表这种结构适用于只有等值查询的场景。 有序数据在等值查询和范围查询场景中的性能就都非常优秀,但是在需要更新数据的时候就麻烦了,你往中间插入一条记录,就必须行挪动后面所有的记录,成本太高。 二叉搜索树:每个节点的左儿子小于父节点,父节点又小于右儿子,查询的时间复杂度为O(log(N)),数据库存储大多不使用二叉树,因为树高过高。一般使用N叉树。 InnoDB的索引模型 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,又因为InnoDB使用了B+树索引模型,所以数据都是存储在B+树中。每一个索引在InnoDB里面对应一棵B+树。(为什么InnoDB选择B+树,因为B

SpringBoot2 结合BeetlSQL开发

十年热恋 提交于 2019-12-07 21:47:18
为什么是SpringBoot2:SpringBoot自从正式版发布以来,受到了众多的关注和追捧。在2.0出来之后,已经与1.X有了很多不同之处。当然也是为了追赶潮流,直接上了2.0作为本文基础框架,当然1.X的版本也是可以使用的。 为什么是BeetlSql:这是一个在国内还没有那么火的DAO工具,根据官网的说法:“ 它是一个超过MyBatis的全功能Java DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。”。本人抱着试一试的想法用此框架进行Demo开发,感觉不错。并且已经用于公司的实战中。该框架与MyBatis以及Hibernate的 网上可以搜索到,本人就不赘述。 在SpringBoot已经出到2.0正式版之后,利用SpringBoot的特点,结合BeetlSQL的优势,可以快速的搭建一个实战级别的项目架构。 话不说多,我们开始吧! 首先开始照常,先搭建一个SpringBoot2的框架。可以新建一个maven project。在pom.xml中引入 2.0.X, 不管X是几,只要是正式版都行。 引入spring-boot-starter-web。排除tomcat是为了打war包放入外部tomcat的时候少生成内嵌tomcat的包或者用其他内嵌容器

04.深入浅出索引(上)

有些话、适合烂在心里 提交于 2019-12-07 19:39:27
简单来说,索引的出现就是为了提高数据查询效率,就像书的目录一样。 索引的常见模型 索引实现的方式有很多种,所以这里就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,比较常见的数据结果有以下三种:哈希表、有序数组和搜索树。 哈希表是一种以键值存储数据的结构,我们只要输入待查找的值即key,就可以找到对应的值即Value。哈希的思路很简单,把值放到一个数据里,用一个哈希函数把Key换算成一个确定的位置,然后把value放在数组的这个位置上。不可避免的,多个key通过哈希函数的换算,会出现同一个值的情况,处理这种情况的方法是,拉出一个链表。所以哈希表这种结构适用于只有等值查询的场景。 有序数据在等值查询和范围查询场景中的性能就都非常优秀,但是在需要更新数据的时候就麻烦了,你往中间插入一条记录,就必须行挪动后面所有的记录,成本太高。 二叉搜索树:每个节点的左儿子小于父节点,父节点又小于右儿子,查询的时间复杂度为O(log(N)),数据库存储大多不使用二叉树,因为树高过高。一般使用N叉树。 InnoDB的索引模型 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,又因为InnoDB使用了B+树索引模型,所以数据都是存储在B+树中。每一个索引在InnoDB里面对应一棵B+树。(为什么InnoDB选择B+树,因为B+树能够很好地配合磁盘的读写特性

sqlite rowid与主键

谁说我不能喝 提交于 2019-12-07 16:22:39
rowid和 Integer主键及自增属性 大多数情况下,sqlite3的表都有一个rowid(也叫oid,_rowid_),这是一个64位的整数,并作为sqlite存储结构B树的主键.因此使用rowid查询会比以其他设定的主键查询,速度会非常快. 在做插入操作的时候,对于rowid的值通常情况下不要去指定,让系统自己去决定该去何值。因为sqlite会通过SQLITE_SEQUENCE来追踪表的rowid取值情况.而且sqlite定义了rowid的取值算法:在未超出rowid的范围内,待插入记录的rowid总是表中存在过的的rowid最大值+1。比如依次插入5条记录,此时最后一条记录的rowid是5,如果把这条记录删除再插入新记录,此时新纪录的rowid是6.而当rowid达到所能表达的最大值时,这时如果有新纪录要插入,系统就会随机从之前的没有使用过的正整数中随机取一个作为rowid(就是之前删除过的).若没有未使用的正整数并且你没有在插入的时候制定rowid为某一个负数的话,系统就会抛出SQLITE_FULL的错误. 如果在创建表的时候设置了主键,并且设置主键的那列是integer(不是int,short integer等等),并且主键没有设定降序时,这时的主键是rowid的别名,换言之,主键和rowid没有区别.如果我们再设定主键autoincrement属性时

MYSQL面试必读

孤人 提交于 2019-12-07 16:03:36
Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。 数据表类型有哪些 答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。 MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。 InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。 c. mysql库主从读写分离。 d. 找规律分表,减少单表中的数据量提高查询速度。 e。添加缓存机制,比如memcached,apc等。 f. 不经常改动的页面,生成静态页面。 g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

1000行MySQL学习笔记,不怕你不会,就怕你不学!

旧时模样 提交于 2019-12-06 12:47:49
🔸Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 🔸连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 🔸数据库操作 -- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version()-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE PATTERN ]-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 🔸表的操作 *请左右滑动阅览 -- 创建表 CREATE [

MySQL必知必会复习笔记(1)

喜欢而已 提交于 2019-12-06 12:31:23
MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看。本系列笔记记录的是:1.自己记得不够牢的代码;2.自己觉得很重要的代码;3.方便查缺补漏。 Unit1 主键 1.应该总是定义主键。 2.不更新主键列中的值。 3.不重用主键列的值。 4.不在主键列中使用可能会更改的值。 Unit3 选择数据库 USE databasename 了解数据库和表 //用show命令来显示信息 SHOW DATABASES; SHOW TABLES; // show亦可以用来显示列表, SHOW COLUMNS需要给出一个表名(customers) SHOW COLUMNS FROM customers; // mysql支持使用DESCRIBE作为show columns from 的一种快捷方式 SHOW STATUS // 用于显示广泛的服务器状态信息 SHOW CREATE DATABASE; SHOW CREATE TABLE; // 分别用来显示创建特定数据库或表 SHOW GRANTS; // 显示授予用户的安全权限 SHOW ERRORS; SHOW WARINGS; 来源: https://www.cnblogs.com/kylinxxx/p/11973249.html

数据库存储引擎的索引实现

廉价感情. 提交于 2019-12-06 10:30:49
一、常见的两种存储引擎对数据的存储: InnoDB和MyISAM要了解这两种引擎的索引实现原理,先要知道这两种引擎对于数据存储的区别。数据库引擎其实是对表的一种形容,同一个库下可能存在多种不同引擎的表。所以下面我会建两张表进行对比。product表和user表他们分别是InnoDB和MyISAM引擎的表。如图: 数据库的数据其实都是存储再磁盘文件中的。data下就是对应的数据库enginetest就是本次新建的测试库了 再打开下一层目录会发现,库中存放的就是表的数据了。两种引擎的区别在这里就十分明显了 显然,MyISAM引擎有三个文件,分别是.frm(数据结构).MYD(数据).MYI(索引),看名字就能看出来了。DATA,INDEX...文件里面具体是什么     InnoDB引擎只有两个文件,一个是.frm(数据结构),一个是.ibd(索引+数据) 接下来我们先看MyISAM引擎的文件到底是什么 你一定想知道这些文件里面到底是什么,虽然我想mysql一定不会把数据简单的裸存在文件中。还是好奇的打开看了一眼,啧啧啧好吧,看不到具体内容,不过MYD文件中显然已经暴露了部分user的信息了,就是张三同学和李四同学,emmm... MYI文件的确是索引,但是原谅我肉眼看不懂,能看懂的大神可以解释下...不过对MyISAM存储数据的分析之后再看其索引实现就很简单了,如下图: 二

mysql的约束、索引、范式

点点圈 提交于 2019-12-06 08:38:08
约束 表或列的primary key,unique,not null等修饰符常常被称作约束(constraint) 主要作用:是数据库用来提高数据质量和保证数据完整性的一套机制,是表定义(DDL语句)的一部分 约束主要包括: 非空约束 (not null) 唯一性约束 (unique) 主键约束 (primary key) 外键约束 (foreign key) 约束的定义方式 创建表时定义 列级别定义 表级别定义 修改表时进行追加定义 约束的查看 使用desc查看列属性查看约束 使用show create 命令查看 使用show index命令查看(无法查看not null 约束) 非空约束(not null) 用于确保其所在列的值不能为空值null,允许有多个列设置非空约束 只有列级定义和追加定义 列级定义 追加定义 非空约束的删除(将其改回为null) 或 惟一约束(unique) 列字段中不允许有重复值,但是可以有空值,允许有多个列设置惟一约束 也被称为惟一索引(其他数据库管理系统略有不同) 列级定义 表级定义 追加定义 删除惟一约束 主键约束(primary key) 主键列中不允许有重复值,也不可以有空值 一个表中只能有一个主键约束,但一个主键约束可以包含多个列 定义主键时会同时为主键创建唯一性索引 列级定义 表级定义 追加定义 删除主键约束 外键约束(foreign