mysql创建索引

MySQL 主键与索引的联系与区别分析

自作多情 提交于 2020-01-07 09:19:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有两个用途: 惟一地标识一行。 作为一个可以被外键有效引用的对象。 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。下面是主键和索引的一些区别与联系。 1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。 主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。 2. 一个表中可以有多个唯一性索引,但只能有一个主键。 3. 主键列不允许空值,而唯一性索引列允许空值。 4. 索引可以提高查询的速度。 其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。

mysql sys库使用功能

房东的猫 提交于 2020-01-06 20:18:14
MySQL5.7新库sys的一些实用功能 sys schema数据主要源自performance_schema。其目标是把查询performance_schema的复杂度降低,让DBA能更好地利用这个库里的数据,更快地了解MySQL的运行情况。sys schema包含了一些视图、函数和存储过程,sys schema用以帮助DBA及开发更方便的分析定位问题。 那么对于我们DBA来说,sys schema的一些主要用途有哪些? 1、哪个用户或者哪个IP的客户端使用了最多的资源? 2、数据库连接来自哪里,以及这些连接对数据库的请求情况是怎样的? 3、数据库中哪些SQL被频繁执行? 4、哪个文件产生了最多的IO,读多还是写多? 5、哪个表上的IO请求最多? 6、哪个表被访问的最多? 7、哪些语句延迟比较严重? 8、哪些SQL执行了全表扫描或执行了排序操作? 9、哪些SQL使用了临时表,又有哪些SQL用到了磁盘临时表? 10、哪个库/表占用了最多的buffer pool? 11、每个连接分配多少内存? 12、自增长字段的最大值和当前已经使用到的值? 13、索引使用情况如何?有哪些冗余索引和无用索引? 14、内部有多个线程在运行? 下面一一举例说明: 1、哪个用户或者哪个IP的客户端使用了最多的资源? mysql> select * from host_summary limit 1\G **

数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等

余生长醉 提交于 2020-01-06 20:11:10
存储引擎 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。 InnoDB(B+树) InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的,一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。 数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等 适用场景 : 1)经常更新的表,适合处理多重并发的更新请求。 2)支持事务。 3)可以从灾难中恢复(通过 bin-log 日志等)。 4)外键约束。只有他支持外键。 5)支持自动增加列属性 auto_increment。 TokuDB(Fractal Tree-节点带数据) TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有些类似, 在 Fractal Tree中,每一个 child 指针除了需要指向一个 child 节点外

Mysql中的锁

半腔热情 提交于 2020-01-06 18:25:00
1. 2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and Exclusive Locks),和两个表级别的锁(Intention Locks)称为锁的基本模式。 后面三个 Record Locks、Gap Locks、Next-Key Locks,我们把它们叫做锁的算法, 也就是分别在什么情况下锁定什么范围。 2.1 锁的粒度 我们讲到 InnoDB 里面既有行级别的锁,又有表级别的锁,我们先来分析一下这两 种锁定粒度的一些差异。 表锁,顾名思义,是锁住一张表;行锁就是锁住表里面的一行数据。锁定粒度,表 锁肯定是大于行锁的。 那么加锁效率,表锁应该是大于行锁还是小于行锁呢?大于。为什么?表锁只需要 直接锁住这张表就行了,而行锁,还需要在表里面去检索这一行数据,所以表锁的加锁 效率更高。 第二个冲突的概率?表锁的冲突概率比行锁大,还是小? 大于,因为当我们锁住一张表的时候,其他任何一个事务都不能操作这张表。但是 我们锁住了表里面的一行数据的时候,其他的事务还可以来操作表里面的其他没有被锁 定的行,所以表锁的冲突概率更大。 表锁的冲突概率更大,所以并发性能更低,这里并发性能就是小于。 nnoDB

MySQL灵魂五十问

给你一囗甜甜゛ 提交于 2020-01-06 17:14:36
1、MySQL 中有哪几种锁? 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 2、MySQL 中有哪些不同的表格? 共有 5 种类型的表格: MyISAM Heap Merge INNODB ISAM 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件; 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引 基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持 ACID 的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数: 一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制, 一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制; 主键索引采用聚集索引(索引的数据域存储数据文件本身)

orcale入门基础

江枫思渺然 提交于 2020-01-06 15:30:43
好长时间没写博客了,莫名其妙的就堕落了一波,从今天开始要加油了!!!!! –创建表空间 create tablespace demo --表空间名 datafile 'c:\demo.dbf' --将表空间创建到此地址(注意表空间后缀名为.dbf) size 100 m --表空间初始大小为100m autoextend on --如果表空间被填满允许自动增长 next 10 m ; --表空间每次自动增长的容量 –删除表空间 drop tablespace demo ; –创建用户 create user msg --用户名 identified by msg --用户密码 default tablespace demo ; --此用户绑定的表空间 –给用户授权 –oracle数据库中常用角色 connect–连接角色,基本角色 resource–开发者角色 dba–超级管理员角色 --给msg用户授予dba角色 grant dba to msg ; –用户切换 --切换到msg用户下 conn msg / msg —创建一个person表 create table person ( pid number ( 20 ) , pname varchar2 ( 10 ) ) ; —对表的操作 ---添加一列 alter table person add ( gender number

Mysql中的锁

柔情痞子 提交于 2020-01-05 23:51:28
1. 2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and Exclusive Locks),和两个表级别的锁(Intention Locks)称为锁的基本模式。 后面三个 Record Locks、Gap Locks、Next-Key Locks,我们把它们叫做锁的算法, 也就是分别在什么情况下锁定什么范围。 2.1 锁的粒度 我们讲到 InnoDB 里面既有行级别的锁,又有表级别的锁,我们先来分析一下这两 种锁定粒度的一些差异。 表锁,顾名思义,是锁住一张表;行锁就是锁住表里面的一行数据。锁定粒度,表 锁肯定是大于行锁的。 那么加锁效率,表锁应该是大于行锁还是小于行锁呢?大于。为什么?表锁只需要 直接锁住这张表就行了,而行锁,还需要在表里面去检索这一行数据,所以表锁的加锁 效率更高。 第二个冲突的概率?表锁的冲突概率比行锁大,还是小? 大于,因为当我们锁住一张表的时候,其他任何一个事务都不能操作这张表。但是 我们锁住了表里面的一行数据的时候,其他的事务还可以来操作表里面的其他没有被锁 定的行,所以表锁的冲突概率更大。 表锁的冲突概率更大,所以并发性能更低,这里并发性能就是小于。 nnoDB

mysql 详解

懵懂的女人 提交于 2020-01-05 00:11:21
1、简介 MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。【MySQL早期叫Unireg】早期轻量级,后来发展到巨无霸(淘宝、faceboock)MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。 SQL标准:ANSI SQL SQL-86, SQL-89, SQL-92, SQL-99, SQL-03 SQL四种语言:DDL,DML,DCL,TCL DDL(Data Definition Language)数据定义语言 DML(Data Manipulation Language)数据操纵语言 DCL(Data Control Language)数据库控制语言 授权,角色控制等 TCL(Transaction Control Language)事务控制语言 SAVEPOINT 设置保存点 ROLLBACK 回滚 SET TRANSACTION SQL主要分成四部分: (1)数据定义。(SQL DDL)用于定义SQL模式、基本表

MySQL数据库优化(1)

情到浓时终转凉″ 提交于 2020-01-04 03:36:02
前言 不管对于哪种服务,对于其优化,无非是从两个方面着手,第一个是对于硬件方面的优化,第二个是对系统以及服务本身的优化。 1、查询连接MySQL服务器的次数 mysql> show status like 'connections'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Connections | 3 | +---------------+-------+ 1 row in set (0.01 sec) 2、查询MySQL服务器的运行时间 mysql> show status like 'uptime'; //单位为“秒” +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Uptime | 127 | +---------------+-------+ 1 row in set (0.00 sec) 3、查询操作的次数 mysql> show status like 'com_select'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ |

数据库索引,这一篇就够了

寵の児 提交于 2020-01-04 01:09:10
目录 1.什么是索引?为什么要用索引? 1.1索引的含义 1.2为什么用? 2.索引的作用与缺点 2.1作用 2.2缺点 3.索引的使用场景 3.1应创建索引的场景 3.2不应创建索引的场景 4.索引的分类与说明 4.1主键索引 4.2单列索引 4.3唯一索引 4.4复合索引 4.5聚集索引与非聚集索引 4.5.1聚集索引 4.5.2非聚集索引 4.5.3使用及语法 4.5.4使用场景对比 4.6聚簇索引与非聚簇索引 4.6.1聚簇索引 4.6.2非聚簇索引 4.6.3Mysql的MYISAM和INNODB引擎 4.6.4对比总结 4.7稠密索引与稀疏索引 4.7.1稠密索引 4.7.2稀疏索引 5.索引的底层原理 5.1 B-Tree 5.2 B+Tree 5.3 B-树和B+树的区别 6. 总结 1.什么是索引?为什么要用索引? 1.1索引的含义 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树)。除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据.这种数据结构就是索引! 简言之,索引就类似于书本,字典的目录! 1.2为什么用? 打个比方,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话