
数据库
消灭BUG鸭
交流分享,共同进步
展开
-
数据库高并发的解决方案
在web服务框架中加入缓存。在服务器与数据库层之间加入缓存层,将高频访问的数据存入缓存中,减少数据库的读取负担。增加数据库索引,进而提高查询速度。(不过索引太多会导致速度变慢,并且数据库的写入会导致索引的更新,也会导致速度变慢)**主从读写分离,**让主服务器负责写,从服务器负责读。将数据库进行拆分,使得数据库的表尽可能小,提高查询的速度。使用分布式架构,分散计算压力。...原创 2021-07-16 09:21:13 · 846 阅读 · 0 评论 -
SQL语法中内连接、外连接(左、右、全)、交叉连接的区别
1、内连接:只有两个元素表相匹配的才能在结果集中显示。2、外连接: 左外连接: 左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。4、右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。5、全外连接:连接的表中不匹配的数据全部会显示出来。6、交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。...原创 2021-07-15 11:08:30 · 1322 阅读 · 0 评论 -
MySQL中索引大总结
1、普通索引:仅加速查询2、唯一索引:加速查询 + 列值唯一(可以有null)3、主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个4、组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并5、全文索引:对文本的内容进行分词,进行搜索6、索引合并:使用多个单列索引组合搜索7、覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖8、聚簇索引:表数据是和主键一起存储的,主键索引的叶结点存储行数据(包含了主键值),二级.原创 2021-07-15 11:05:50 · 114 阅读 · 0 评论 -
MySQL中CHAR和VARCHAR的区别
char的长度是不可变的,用空格填充到指定长度大小,而varchar的长度是可变的。char的存取数度还是要比varchar要快得多char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。varchar的存储方式是:对每个英文字符占用2个字节,汉字也占用2个字节。...原创 2021-07-15 11:03:24 · 137 阅读 · 0 评论 -
创建索引时的注意事项
1、非空字段:应该指定列为NOT NULL,除非你想存NULL。在 MySQL 中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值;2、取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度高;3、索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高。唯一、不为空、经常被查原创 2021-07-15 11:01:19 · 625 阅读 · 0 评论 -
事务四大特性(ACID):原子性、一致性、隔离性、持久性
1、原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。2、一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。3、隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执 行原创 2021-07-15 10:50:01 · 12840 阅读 · 0 评论 -
数据库中的主键、超键、候选键、外键
1、超键:在关系中能唯一标识元组的属性集称为关系模式的超键2、候选键:不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!3、主键:用户选作元组标识的一个候选键程序主键。4、外键:如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的...原创 2021-07-14 11:18:38 · 4285 阅读 · 0 评论 -
建立数据库索引的时机以及覆盖索引的定义
1、在最频繁使用的、用以缩小查询范围的字段,需要排序的字段上建立索引。不宜:1)对于查询中很少涉及的列或者重复值比较多的列2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。2、覆盖索引的定义:如果一个索=引包含(或者说覆盖)所有需要查询的字段的值,称之为“覆盖索引”。在InnoDB存储引 擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!...原创 2021-07-14 11:17:19 · 226 阅读 · 0 评论 -
MySQL索引主要使用的两种数据结构
哈希索引,对于哈希索引来说,底层的数据结构肯定是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。BTree索引,Mysql的BTree索引使用的是B树中的B+Tree,BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。但对于主要的两种存储引擎(MyISAM和InnoDB)的实现方式是不同的。...原创 2021-07-14 11:11:20 · 513 阅读 · 0 评论 -
数据库悲观锁和乐观锁的原理和应用场景
1、悲观锁,先获取锁,再进行业务操作,一般就是利用类似 SELECT … FOR UPDATE 这样的语句,对数据加锁,避免其他事务意外修改数据。当数据库执行SELECT … FOR UPDATE时会获取被select中的数据行的行锁,select for update获取的行锁会在当前事务结束时自动释放,因此必须在事务中使用。2、乐观锁,先进行业务操作,只在最后实际更新数据时进行检查数据是否被更新过。Java 并发包中的AtomicFieldUpdater 类似,也是利用 CAS 机制,并不会对数据加原创 2021-07-14 11:09:34 · 751 阅读 · 0 评论 -
数据库并发事务会带来哪些问题
数据库并发会带来脏读、幻读、丢弃更改、不可重复读这四个常见问题,其中:脏读:在第一个修改事务和读取事务进行的时候,读取事务读到的数据为100,这是修改之后的数据,但是之后该事务满足一致性等特性而做了回滚操作,那么读取事务得到的结果就是脏数据了。幻读:一般是T1在某个范围内进行修改操作(增加或者删除),而T2读取该范围导致读到的数据是修改之间的了,强调范围。丢弃修改:两个写事务T1 T2同时对A=0进行递增操作,结果T2覆盖T1,导致最终结果是1 而不是2,事务被覆盖。不可重复读:T2 读取一个数据原创 2021-07-14 10:15:34 · 1397 阅读 · 0 评论 -
MySQL中的事务回滚机制
在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。 当事务已经被提交之后,就无法再次回滚了。回滚日志作用:1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息;2) 在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因。...原创 2021-07-14 10:12:21 · 2656 阅读 · 0 评论 -
数据库索引采用B+树的相关内容
1、数据库索引采用B+树而不是B树的原因主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。2、文件索引和数据库索引为什么使用B+树文件与数据库都是需要较大的存储,也就是说,它们都不可能全部存储在内存中,故需要存储到磁盘上。而所谓索引:为了数据的快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数,因此B+树相更合适作为索引。数据库系统巧妙利用了局部性原理与磁盘预读原理,将一个节点的大小设为等于原创 2021-07-14 10:10:32 · 244 阅读 · 0 评论 -
MySQL如何做到性能优化
为搜索字段创建索引避免使用 Select *,列出需要查询的字段垂直分割分表选择正确的存储引擎原创 2021-07-14 09:55:43 · 180 阅读 · 0 评论 -
MyISAM和InnoDB实现B树索引方式
1、 MyISAMMyISAM,B+Tree叶节点的data域存放的是数据记录的地址,在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录,这被称为“非聚簇索引”2、InnoDBInnoDB,其数据文件本身就是索引文件,相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数原创 2021-07-14 09:28:19 · 426 阅读 · 0 评论 -
数据库中为什么使用索引
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。帮助服务器避免排序和临时表。将随机IO变为顺序IO。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。...原创 2021-07-13 23:20:30 · 242 阅读 · 0 评论 -
MySQL执行一条SQL的具体步骤及内部构造
1、MySQL执行一条SQL的具体步骤:Server层按顺序执行sql的步骤为:1)客户端请求->2)连接器(验证用户身份,给予权限) ->3)查询缓存(存在缓存则直接返回,不存在则执行后续操作)->4)分析器(对SQL进行词法分析和语法分析操作) ->5)优化器(主要对执行的sql优化选择最优的执行方案方法) ->6)执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)->7)去引擎层获取数据返回(如果开启查询缓存则会缓存查询结简单原创 2021-06-21 22:24:18 · 145 阅读 · 0 评论