共享内存通信 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。...组合索引:一个组合索引包含两个或两个以上的列, (1)普通索引:最基本的索引,它的结构主要以B+树和哈希索引为主,对数据表中的数据进行精确查找 (2)唯一索引:索引列的值必须唯一,但允许有空值 (3)主键索引...:字段设置主键时,会自动创建主键索引,确保主键值唯一 (4)全文索引:搜索数据表中的字段值是否包含搜索关键字,类似模糊查询 (5)联合索引:对多个字段同时建立的索引叫联合索引。...因为当表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源; (9) 区分度低的字段,建议不创建索引。...因为当表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源; (9) 区分度低的字段,建议不创建索引。
手册上说在聚集和二级索引: 如果表没有主键或合适的唯一索引,InnoDB内部会在一个包含行ID值的合成列上生成一个隐藏的聚集索引。这些行是按照InnoDB给表中的行分配的ID排序的。...实现隐式的 Row IDs 这实际上是这样实现的,如手册所说,如果一个表声明没有主键和非空的唯一键,InnoDB会自动添加一个6字节(48位)的整数列ROW_ID到表中,并基于该列集群数据。...手册没有提到的是,所有使用这样的ROW_ID列的表共享相同的全局序列计数器(手册上说“单调递增”,但没有澄清),这是数据字典的一部分。...所有行ID的最大使用值(从技术上说,是下一个要使用的ID)存储在第7页(类型SYS)的系统表空间(例如ibdata1)中,在数据字典头(字段DICT_HDR_ROW_ID)中。...在具有隐式键的多个表中并行插入可能会受到性能限制,因为它将在共享互斥锁和共享计数器变量的缓存争用上序列化。
主键索引:主键索引是一种特殊的唯一索引,一个表只能有一个主键且不允许有空值;索引列只能出现一次且必须唯一,InnoDB要求表必须有主键,如果没有显示设置主键索引,那么会自动为数据表创建一个隐含的字段 row-id...唯一索引:建立在unique字段上的索引就是唯一索引,不允许具有索引值相同的行,索引列的值可以允许为null 普通索引:要求字段不为主键也不要求字段为unique的索引叫普通索引。...当然这些操作对于内存临时表来说是可以执行的,为什么内存表不受这些限制呢?因为内存表不需要备份,所以也就没必要满足这些条件。...(默认情况下,这个数字会很大,所以不用担心写锁的优先级下降) MDL的锁释放必须要等到事务结束才会释放 行锁 共享锁 共享锁能允许事务获取到锁后进行读操作,共享锁是不互斥的,一个事务获取到共享锁后,另外一个事务也可以获取共享锁...InnoDB使用聚集索引,数据存储是以聚集索引字段的大小顺序进行存储的,当表没有主键或唯一非空索引时,innodb就会使用这个行ID自动产生聚簇索引。
-更新 事务默认自动提交-关闭测试的两个session自动 行级锁-共享锁,无法加排它锁 行级锁(不同行)-(读)共享锁,(写)可以加排它锁 行级锁(同行)-(读)(读) 测试不走索引的字段锁 互斥锁和排它锁的兼容性...测试不走索引的字段锁 ? 加读锁motto1 ? 更新motto2(两条根据不同的motto,但被锁住了) ?...释放读锁commit; 因此不走索引时,就是表级别锁 InnoDB在没有用到索引的时候用的是表级锁 意向锁(表级锁) IS读IX写 锁(和MyISAM的共享锁排它锁很像,避免行轮询,形成一个表锁...可见性 readView:遵循可见性算法,将事务id取出与活跃id对比。如果>=这些id,则回滚取出undolog,直到小于活跃事务id。 保证获取到当前数据最稳定版本 ?...主键的排序是在6——11的范围内的,所以被锁住 ? 不走索引 类似锁表,对所有的gap都锁 也可以起到防止幻读的效果 ? 无id索引 ? 数据 ?
而对于这些问题又可以通过调整事务的隔离级别来避免,那为什么调整事务的隔离级别后能避免这些问题产生呢?这是因为不同的隔离级别中,工作线程执行SQL语句时,用的锁粒度、类型不同。...但这里所谓的不会排斥,仅仅只是指不会排斥其他事务来读数据,但其他事务尝试写数据时,就会出现排斥性,举个例子理解:事务T1对ID=18的数据加了一个共享锁,此时事务T2、T3也来读取ID=18的这条数据,...这时T2、T3是可以获取共享锁执行的;但此刻又来了一个事务T4,它则是想对ID=18的这条数据执行修改操作,此时共享锁会出现排斥行为,不允许T4获取锁执行。...样例:做个关于共享锁的小测试,先打开两个cmd窗口并于mysql建立连接-- 窗口1:-- 开启一个事务begin;-- 获取共享锁并查询 id=2 的数据select * from bank_balance...不过MyISAM引擎中,获取了锁还需要自己手动释放锁,否则会造成死锁现象出现,因为如果不手动释放锁,就算事务结束也不会自动释放,除非当前的数据库连接中断时才会释放。
1.概念 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。...行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。...存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。...从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。 视图的建立和删除只影响视图本身,不影响对应的基本表。...4) 共享所需数据 通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
Key_len 表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长 度,在不损失精确性的前提下, 长度越短越好 。...对于表级锁,主要分为以下三类: 表锁 元数据锁(MDL) 意向锁 表锁 表锁一般分为两种: 表共享读锁:对于所有客户端均可以进行读操作,但均不可进行写操作 表独占写锁:仅对当前客户端可以进行读写操作,其他客户端不可操作...注意: 仅当共享锁和共享锁共存时兼容 其他情况兼不兼容 下面我们给出不同SQL语句相对应的行锁级别: SQL 行锁类型 说明 INSERT 排他锁 自动加锁 UPDATE 排他锁 自动加锁 DELETE...undo log 具有两种操作: Undo log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。...实现原理三部曲 隐式字段 当我们创建一个表之后,表中的字段不仅仅包括我们创造的字段,还包括三个自动生成的字段: 隐藏字段 含义 DB_TRX_ID 最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务
日志 日志类别 binlog: 二进制日志,记录了数据库对数据的修改记录,包括了 DDL:例如表的创建,数据更新等。但并不包括 select 这些查询语句。...表锁/行锁 表锁:在操作数据时,直接将整张表锁住,操作粒度很大,很容易让其他事务在等待,但不会产生死锁。 行锁:针对的是行记录的并发控制,锁粒度很细,能支持高并发,但是不排除会有死锁情况产生。...但使用了 UPDATE, DELETE,或 SELECT with FOR UPDATE(排它锁) 或 FOR SHARE(共享锁),则会根据下面的情况来使用锁: 在唯一索引上精确查找某条记录时,使用记录锁...自增 ID 是由有序的,而 UUID 是无序的,如果该字段作为索引,那么就会很容易打破 B+ 树的平衡,进而不断的在进行磁盘数据页的调整,导致性能下降 13. 分库分表有哪些?有什么优缺点?...内连接、外连接区别 内连接:只有符合条件的记录才会出现在结果集里 外连接:其结果集中不仅包含符合连接条件的行,还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接
数据的完整性:记录中的数据应满足业务逻辑的要求,如非空约束、唯一约束、检查约束等。这些约束有助于确保数据的准确性和可靠性。 字段设计规则 字段命名:字段名应具有描述性,能够反映字段所存储的数据内容。...表的关联关系 在关系型数据库中,表的关联关系是通过共享相同列的值(通常是主键和外键)来建立的,这种关联关系允许跨多个表获取相关的数据。...一对一关系(One-to-One Relationship) 定义:当一个表的每个记录(行)与另一个表的某个记录(行)具有唯一对应关系时,就存在一对一关系。...示例: “员工”表中的“上级员工ID”字段,用于表示每个员工的直接上级是谁。这样,员工表就通过“上级员工ID”字段实现了自我引用。...唯一性:在一对一关系中,外键列通常具有唯一性约束,以确保每个外键值只能与另一个表中的一条记录相对应。
此时查询的字段多了一个sex,并没有为这个字创建索引,此时又会发生回表查询。 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。...10) is NULL或者is not NULL 有时候不走索引,都是MySQL底层会进行字段判断,看执行效率是否需要走索引还是走全文扫描。 11) in走索引,not in不走索引。...select age,id from t_user order by age; 但若是select * 会走filesort select * from t_user order by age; 多字段排序时...间隙锁:当我们用范围条件,而不是使用相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据进行加锁;对于键值在条件范围内但并不存在的记录,叫做"间隙(GAP )",InnoDB也会对这个...主从复制 master节点 1) 在my.cnf配置以下内容: #mysql服务ID,保证整个集群环境中唯一 server-id=1 #mysql binlog日志的存储路径和文件名 log-bin=
复合主键,使用多列充当主键,不建议。 6.5.1.3、结论 使用单字段的自然主键。 6.5.1.4、例子 创建学生表,id为主键自增,name唯一,email不为空,age默认18。...外键可以为NULL,且不一定是另一张的主键,但是必须具有唯一性,一般情况下会引用另一张表的主键。...字段添加外键约束,引用的是t_calss的no字段 ); 6.5.3、唯一性约束(unique) 唯一约束修饰的字段具有唯一性,不可以重复,但是可以为NULL,也可以同时为NULL。...需求: dept表中的40部门并不存在员工,但在右连接中,如果dept表为右表,那么还是会查出40部门,但相应的员工信息为NULL。...该字段经常出现在where子句中(经常根据哪个字段查询) 注意:主键和具有unique约束的字段会自动添加索引,根据主键查询的效率高,尽量根据主键索引,我们可以查询sql语句的执行计划。
❞ 各类锁介绍 共享锁和排他锁 共享锁又称读锁,在数据库中表示为S锁,多个事务可以对同一数据添加共享锁,即共享锁之间不互斥。...age = 20 lock in share mode: 加读锁当前读,mysql通过普通索引idx_age就能过滤并筛选出想要的字段(id), 无需回表到主键索引查询。...表锁和行锁又能分为表共享锁/表互斥锁、行共享锁/行互斥锁。兼容性参考共享锁和排他锁>小节。 意向锁 上小节讲到innodb支持多粒度的锁。而共享锁与排他锁是互斥的。...比较特殊的是,共享意向锁(IS)和排他意向锁(IX)之间不互斥,都是相互兼容的。 同时,意向锁跟行级锁之间也是相互兼容的。 意向锁主要作用在表锁上。...但违反了当前读的语义:读取当前最新版本的数据。 所以语句2是不允许插入的。但语句1该加什么锁才能阻塞语句2呢?只加行锁肯定是不行的,因为语句1加锁的时候无法预知后面有age=20的插入。
下面分别介绍一下这些表的结构和内容: user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。 db权限表:记录各个帐号在各个数据库上的操作权限。...索引的基本原理 索引用来快速地寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。...页级锁:页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。 从锁的类别上分MySQL都有哪些锁呢?...主键是数据库确保数据行在整张表唯一性的保障,即使业务上本张表没有主键,也建议添加一个自增长的ID列作为主键。设定了主键之后,在后续的删改查的时候可能更加快速以及确保操作数据范围安全。...将字段很多的表分解成多个表:对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。
第一范式(1NF) 字段具有原子性,不可再分。...下面分别介绍一下这些表的结构和内容: user权限表: 记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。 db权限表: 记录各个帐号在各个数据库上的操作权限。...TINYBLOB BLOB MEDIUMBLOB LONGBLOB TEXT TEXT是一个不区分大小写的BLOB;有四种TEXT类型: 它们对应于四种 BLOB 类型,并具有相同的最大长度和存储要求。...将字段很多的表分解成多个表对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。 因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。...在第一次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数据。
(id相同,执行顺序从上到下;id不同,值越大,越先执行) 表示连接类型,性能由好到差的连接类型为null、system、const、eq_ref、ref、range、index、all 实际使用的索引...(group by)操作的字段建立索引 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引 尽量使用联合索引...MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView MVCC-实现原理 记录中的隐藏字段 隐藏字段含义DB_TRX_ID最近修改事务ID,记录插入这条记录或者最后一次修改该记录的事务...ReadView中包含了四个核心字段: 字段含义m_ids当前活跃的事务ID集合min_trx_id最小活页事务IDmax_trx_id预分配事务ID,当前最大事务ID+1(因为事务ID是自增的)creator_trx_idReadView...#不包含数据库的创建语句 -t,--no-create-info #不包含数据表的创建语句 -d,--no-data #不包含数据 -T,--tab=name #自动生成两个文件
大家好,又见面了,我是你们的朋友全栈君。 视图 什么是视图 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。...行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。...共享所需数据 通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。...可以大大加快数据的查询速度,这是使用索引最主要的原因。 在实现数据的参考完整性方面可以加速表与表之间的连接。...索引分类 普通索引:是最基本的索引,它没有任何限制; 唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。
当我们给一行数据加上共享锁之前,数据库会自动在这张表上面加一个意向共享锁。 反过来说: 如果一张表至少有一个意向共享锁,说明有其它事务给其中的某些数据行加上了共享锁。 排它锁也相同。...那么这个时候我们就要去扫描整张表才能确定能不能成功加上一个表锁,如果数据量特别大,比如上千万的数据时,加表锁的效率是不是非常低? 但如果我们引入了意向锁之后就不一样了。...第二种情况,使用不同ID加锁,可以加锁成功【不阻塞】。 第三种情况,使用不同字段,相同记录加锁【阻塞】。 第四种情况,使用不同字段,不同记录加锁【阻塞】。...答:如果没有显示定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。 3. 一张表有没有可能没有索引?...; 找出持有锁的事务之后,如果有一个事务长时间持有锁不释放,可以kill事务对应的线程ID,也就是INNODB_TRX表中的trx_mysql_thread_id。
上一篇《事件统计 | performance_schema全方位介绍》详细介绍了performance_schema的事件统计表,但这些统计数据粒度太粗,仅仅按照事件的5大类别+用户、线程等维度进行分类统计...对于accounts表,每个连接在表中每行信息的唯一标识为USER+HOST,但是对于users表,只有一个user字段进行标识,而hosts表只有一个host字段用于标识。...字段值大于0时,执行truncate语句不会删除这些行,TOTAL_CONNECTIONS字段值被重置为CURRENT_CONNECTIONS字段值; · 依赖于连接表中信息的summary表在对这些连接表执行...该表将针对用户名作为唯一标识进行统计当前连接数和总连接数,server启动时,表的大小会自动调整。...(3)hosts表 hosts表包含客户端连接到MySQL server的主机信息,一个主机名对应一行记录,该表针对主机作为唯一标识进行统计当前连接数和总连接数。
索引可以避免全表扫描去查找数据,提升检索效率。 21.什么样的数据可以成为索引? 主键、唯一键等,能区分字段唯一性的数据。...25.数据库中锁的分类 按锁粒度划分:行级锁、表级锁、页级锁 按锁级别划分:排它锁、共享锁 按加锁方式划分:隐式锁、显示锁 按使用方式划分:悲观锁、乐观锁 26.解释一下排它锁和共享锁 共享锁:不堵塞,...排它锁:一个写锁会阻塞其他的读锁和写锁,这样可以只允许一个用户进行写入,防止其他用户读取正在写入的资源。 27.排它锁和共享锁的兼容性 仅共享锁和共享锁是兼容,其余所有情况不兼容。...: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 非关系型数据库的优势: 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系...应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值
为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB 还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁: 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的...FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。...expalin 各字段解释 id(select 查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序) id相同,执行顺序从上往下 id全不同,如果是子查询,id的序号会递增,id值越大优先级越高...在不损失精确性的情况下,长度越短越好 key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的 ref(显示索引的哪一列被使用了,如果可能的话...优于用 in 注意:A表与B表的ID字段应建立索引。
领取专属 10元无门槛券
手把手带您无忧上云