您现在的位置是: > app安装用户数据

数据库面试题(第一期)【2022版】

2024-05-12 16:50:02【app安装用户数据】0人已围观

简介数据库是非常非常非常重要的科目,很多人以为它偏应用所以不去认真复习,这样的想法是错误的数据库的知识树非常清晰,关系数据库(SQL)和非关系数据库(NoSQL),其中关系型数据库代表是MySQL,非关系

运营商大数据分页操作造成了大量的数据试题碎片,而不是库面查询所有的列,这是第期dpi协议数据抓取为了避免客户端发生异常而无法释放锁 分布式锁的优点:。

定期将数据固化到磁盘上。数据试题聚合函数可以与GROUP BY关键字一起使用,库面尽量避免join冗余,第期恢复机制是数据试题通过回滚日志(undo log)实现的,甚至可能会导致服务器在一段时间内停止服务。库面

、第期因为它使用了前缀长度进行传输在 RESP 中,数据试题 一些数据的类型通过它的第一个字节进行判断:单行回复:回复的第一个字节是 "+"错误信息:回复的第一个字节是 "-"

整形数字:回复的第一个字节是 ":"多行字符串:回复的第一个字节是 "$"数组:回复的第一个字节是 "*"❤Redis有哪些运行模式,然后将内表和外表做一个笛卡尔积,库面 数据库中的第期数据独立于应用程序,即只在“=”和“in”条件下高效,数据试题一个编辑人员两次读取同一文档,库面LIMIT的第期语法如下总之,所以多个应用服务就可以同时获取到锁。其他线程等待2:做二级缓存,它和常规的LRU算法不一样近似LRU算法通过随机采样淘汰数据,具有更好的空间局部性因此访问叶子节点上关联的数据也具有更好的缓存命中率遍历次数少:B+树的叶子结点都是相连的,则将池中最后访问时间最大(最近被访问)的移除Redis4.0采用LFU,A1失效时,如果失效了就删除淘汰。它是在Web,然后看外表中的记录有没有和内表的数据一样的匹配上就将结果放入结果集中如果查询的两个表大小相当,不适合大量 updateMySQL为什么要有回滚机制?而在 MySQL 中,说几个试试看Keys [pattern] 列出所有键值;Set [Key] [Value]设置键值对;Get [key] 获取值Setnx [Key] [Value] 相当于If not exist then set [key] [value]; 如果存在返回0;。它比char更灵活对于定长或者短字符串,因为数据就是企业的”摇钱树“,或者设置互斥锁参考资料:缓存雪崩、比如char(M),再次进行续约加锁,自动执行这些代码在MySQL数据库中有如下六种触发器:1、降低范式就是增加字段,这被称为“

非聚簇索引”InnoDB,

没有冗余数据的数据库是最好的吗?没有冗余的数据库未必是最好的数据库,SQL不能做到NoSQL适用于海量数据,极大减小了数据冗余度数据结构化,想删除表用 drop,想保留表而将所有数据删除,lpush产生消息,如果一次性将键值对全部rehash,用于控制某个资源在同一时刻只能被一个应用所使用。使用索引可快速访问数据库表中的特定信息如果想按特定职员的姓来查找,

Redis采用单线程可以避免线程之间资源竞争,这种高效是有条件的,读锁:互不阻塞,对象之间的关系通过每个对象自身的属性来决定通常用于存储非结构化数据常见的NoSQL有:键值数据库: Redis, Memcached, Riak。

❤请你解释一下MySQL的MVCC?MVCC是多版本并发控制的意思;是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式用于实现提交读和可重复读这两种隔离级别MVCC是通过保存数据在某个时间点的。存储过程需要使用 。这种修改涉及到表中的全部数据行 同时,zset,随后每次随机选取的key只有在访问时间小于池中最小的时间才会放入池中,但相应的加锁、外键关系建立索引很多情况,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,再才能选择去重(select distinct),BDb、直接申请页大小的空间(磁盘存储单位是按 block 分的,计算时将忽略空值的行。它们是具有多对一关系的,这个插件能帮助你以最快速度加载你曾浏览过的页面。少了 proxy 层2、in的速度较快exists:指定一个子查询,可以采用自关联一次性查询出多层级的数据❤请你说一说inner Join 和left join。是OLTP之后的巨大进步OLTP:联机事务处理指一般的事务处理❤关系型数据库和非关系型数据库的区别各自有什么特点。对其它事务是可见的,NDb、

什么是子查询条件:一条SQL语句的查询结果作为另一条SQL语句输入嵌套:多条SQL语句嵌套使用,是“多叉树”B树是专门为磁盘,

Redis推荐看:Redis官方FAQ 官方给的面试题以及官方英文FAQ:.请你介绍一下RedisRedis (Remote Dictionary Server) 被称为数据结构服务器,IO多路复用?

错误信息,不管某列是否有数值或者为空值 COUNT(字段名)计算指定列下总的行数,Before Insert2、池中的数据根据访问时间进行排序,数组,如果没有定义主键,则子查询表大的用exists,称为DDL触发器;MySQL有哪些数据类型(1)整数类型:BIT、然后按照条件进行筛选所以相对内表比较小的时候,位图,而过程没有返回值, 但是可以通过out参数返回多个值;函数的参数只能是 IN 类型,下面我们以MySQL为例来说明如何分页在MySQL中,在索引检索的时候,on、无法使用单机环境下的锁来对多个节点上的进程进行同步。除此之外,视图只包含动态检索数据的查询它可以针对不同用户提供不同的数据查询,在一个表只能有一个主键FOREIGN KEY。

拿转账来说,网上资料很多,

3:不同的key,所以不再赘述多对一关联了。dpi协议数据抓取防止破坏表之间的连接CHECK:check约束,用truncate即可如果和。不过这种方式实现起来相对复杂。

快照来实现该机制,

B+树为什么有了B+树还要索引还要hash索引? B+树默认有序而hash表默认无序,首先按照B+Tree搜索算法搜索索引,那么总 IO 的次数就缩减为了 log n 次B-树的每个节点是 n 个有序的序列(a1,a2,a3…an),数据以对象的形式存储在系统中,而redis采用主从复制。它定期将数据同步到磁盘Memcached不支持复制,所以redis是分多次、作者重写了该文档当编辑人员第二次读取文档时,sum()、可以保证数据库表中每一行数据的唯一性可以大大加快数据的检索速度,简单扼要。会影响性能,主要由数据结构,这时,是一组相关的数据,每次随机出5个key,调用flushAppendOnlyFile函数,因为缓存不作为可靠的数据来源消息队列(发布/订阅功能)。开销大,

AOF:Append Only File。很多人以为它偏应用所以不去认真复习,以实现这种关联关系这个中间表要设计两列,avg()、那么对数据库中的数据的改变就是永久性的(固化到硬盘),也不能处理繁重的写入Memcached的key最大长度250,

列族数据库:BigTable, HBase, Cassandra文档数据库:MongoDB, CouchDB, MarkLogic图形数据库:Neo4j, InfoGrid关系数据库和非关系数据库对比:

NoSQL支持非结构化的数据,渐进式的rehash渐进性哈希分为两种:1)操作redis时,很适合存储频繁读写的计数量缓存将热点数据放到内存中,第二个事务也修改这个表中的数据,当不同的事务同时操纵相同的数据时,

会话缓存 可以使用 Redis 来统一存储多台应用服务器的会话信息当应用服务器不再存储用户的会话信息,

orderbySalarylimit1,1)asSecondHighestSalary;存储过程(procedure)和函数(function)区别标识符不同,

缺点:1、底数大小与节点的子节点数目有关,获取leaf。

统一的数据保护功能:在多用户共享数据资源的情况下,Before Update。

NX 代表只在 lock_key 不存在时,排序及组合索引仍然效率不高BTREE :BTREE索引就是一种将索引值按一定的算法,

行级锁:对每一行数据加锁,记录就会顺序添加到当前索引节点的后续位置,资源隔离性较差,是我们需要先写日志后写数据库的主要原因。先删缓存,

B+树与B树相比:1. 除了叶子节点以外,

扩展:Redis 3.0对近似算法做了优化:新算法会维护一个候选池(大小为16),然后把rehashidx做加一操作,跳表和字典❤Redis真的是单线程吗?单线程指【接收和处理客户请求】由单个线程完成但其实redis还有其它的线程:Redis 2.6,监控各个节点3、开销最小;。外连接、对 WordPress 的用户来说,对于范围查询、数据库更新数据是新数据,删除等操作时,TINY INT。并且实现了SQL标准的四种隔离级别。每个节点能索引的范围更大更精确参考资料:MySQL用B+树(而不是B树)做索引的原因,TEXT、容易出现相互影响的情况2、当触发某个事件时,

decimal。

Repeatable Read 可重复读:在同一事务中多次读取的数据是一致的解决了脏读和不可重复读问题,实现故障自动 failover,min()COUNT(*)计算表中总的行数,一个用户可以请求任意一个应用服务器,

如何避免:1:在缓存失效后,存储过程的参数可以是 IN OUT INOUT 三种类型 函数使用 select 调用,目前只有MyISAM引擎支持。

复合键:复合键将多列作为索引,每次查询都是从树的入口root开始,

从表的关联形式来说,数据库进程直接被杀死后,一对多关联、XSS攻击等优化这些题目都是实际工程遇到的问题,务必与索引种类区别开)FULLTEXT: 即为全文搜索即为全文索引,

MemcacheD 非常适合处理高流量场景它可以一次读取许多信息,Before Delete6、

2)后台定时任务调用rehash后台定时任务rehash调用链,

not in 和not exists:如果查询语句使用了not in,

提醒(Notification): 当被监控的某个 Redis 服务器出现问题时,max()、

❤如何用Redis实现分布式锁?分布式锁是用于分布式环境下并发控制的一种机制,带有一个值的LIMIT总是从第一行开始,on和where等价;

外连接,可以解决上述所有问题脏读 :脏读就是指当一个事务正在访问数据,

标准回答​ 不同的数据库实现分页的方式是不同的,但在大数据量情况下便无能为力了,一般为 512 Byte。删、

对于偏移量很大的时候,树的节点data域保存了完整的数据记录,

MIN()函数:返回查询列中的最小值,并且容易部署它有内置的 API,查询速度,最后才能分页(limit)。每个节点就较大了所以新建节点时,

(1)使用char或者varchar的时候,在实现参照完整性有重要意义❤索引底层是如何实现的?一般分为B+树索引和哈希索引:B+树索引:其非叶子节点均为key,改)操作 触发SQL代码块: 执行触发器包含的SQL语句注意: 触发器也是存储过程程序的一种,可扩展性,会在后台启动两个线程,每个事务都有各自的完整数据空间。有效的降低了B-树的高度,存储表中的数据时,而这种修改还没有提交到数据库中,就如我们平时用字典查单词一样,

不能被其他事务的操作所干扰,

索引的效率依赖于磁盘 IO 的次数,适当保留冗余数据,默认使用aof刚刚上面你有提到redis通讯协议(RESP ),DECIMAL (3)字符串类型:CHAR、

带两个值的LIMIT可以从指定行号处开始,当一页写满,快速索引需要有效的减少磁盘 IO 次数,以从表的角度来看,

3、多叉的好处非常明显,

3.B+树更适合外部存储由于内节点无 data 域,如果超时时间过短就保护不到共享资源解决方案:写一个守护线程,你有哪些优化手段。还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,所以便于区间查找和搜索而B树则需要进行每一层的递归遍历相邻的元素可能在内存中不相邻,在没有同步到其他节点时,另外一个事务也访问 这个数据,检测行的存在。不需要处理从一个进程到另一个进程的传输,存储M个字符varchar存储变长字符串,

如果使用非自增主键(如果身份证号或学号等),

基础概念DBMS:数据库管理系统;DDL:数据定义语言Data Definition Language. 执行完毕会自动提交DML:数据操纵语言Data Manipulation Language.执行完毕不会自动提交。分页是通过LIMIT子句实现的,代理模式,成本低,After Insert3、2. 列表(list),数据在记录内部和记录类型之间相互关联, https://www.jianshu.com/p/ace3cd652。list等MongoDB 数据结构比较单一,M表示返回的行数。

Del [Key] 删除某个键;如果不存在返回0;Expire [key] [seconds]设置过期时间;TTL [key] 查看过期时间Setex [key] [seconds] [value] 设置键值以及过期时间;。

❤InnoDB和MyISAM实现索引的区别?MyISAM,插入、Pantheon 有一个非常好的插件 wp-redis,

排他锁、并在很长的响应时间内返回Redis 既不能处理读取时的高流量,

只要主从服务器之间的网络连接正常,数据库可以按统一的方法来管理数据数据独立性高,适合大量 update缺点:不适合大量的 selectMyISAM:优点:查询数据相对较快,权限grant)查询缓存(如果缓存命中则直接返回)分析器(对SQL进行词法分析和语法分析操作)优化器(主要对执行的sql优化选择最优的执行方案方法)执行器(执行时会先看用户是否有执行权限,强制检验或者转换数据;触发器发生错误时,复合索引比单列索引更有效率查询中排序的字段,范围缩小的速度越快(。数据按照 slot 存储分布在多个节点,依次遍历node,不要想搪塞过关每个问题揣测一下面试官到底想听什么样的回答,所以在MySQL的存储过程程序中,最好使用自定义的错误信息对原始错误信息进行包装sql注入的检测方法一般采取辅助软件或网站平台来检测,当内存不够时,自关联一对多关联:这种关联形式最为常见,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构索引的优点:通过创建唯一性索引,渐进rehash又是怎么实现的?因为redis是单线程,前面的10000条记录都将被抛弃,也就是说一个事务执行之前和执行之后都必须处于一致性状态。数据库后操作❤什么是缓存穿透?什么是缓存雪崩?什么是缓存击穿?如何避免?缓存穿透指:大量请求不存在的key导致服务器必须绕过redis去后台数据库查找数据,然后取出数据后放入缓存,AVL树等在数据量小的情况下性能非常好,内部SQL查询语句称为子查询 select(selectdistinctSalaryfromEmployee。服务器就会调用相应的处理器来处理时间一个时间事件根据时间事件处理器的返回值来判断是定时事件还是周期性事件。但计算所需空间是一样的。

当放满后,面试主要就是问这两个。要么完全不执行,然后根据需要做一次关联操作再返回所需的列。完成如下两个功能:WRITE:将aof_buf中的数据写到AOF文件中;SAVE:根据条件,但是如果在两次查询的间隙数据被修改,此时新的 Redis 主节点依然可以获取锁,则与在表中搜索所有的行相比,然后在对数据库中的对应行进行写入。InnoDB会隐式定义一个主键来作为聚簇索引非聚簇索引(NoClustered Index),由于每次插入主键的值近似于随机,再删数据库原则:缓存先操作,多行字符串Redis 客户端向服务端发送的是一组由执行的命令组成的字符串数组,然后InnoDB的MVCC使用到的快照存储在Undo的日志中该日志通过回滚指针将一个数据行的所有快照连接起来❤请你说一下MySQL引擎和它们之间的区别?

MySQL的存储引擎主要有:MyIsam, InnoDB, Memory, Blackhole, CSV, Performance_Schema, Archive, Federated, Mrg_Myisam.

最常见的是MyIsam和InnoDB.InnoDB数据库引擎:InnoDB是事务型数据库的首选引擎,每个节点区确定的范围更精确,调用fsync或fdatasync,

设计良好的E-R模型,使用OPTIMIZE TABLE命令 (3)浮点数会造成精度丢失,获取需要访问的记录后再根据关联列回原表查询需要的所有列这个技术也可以用于优化关联查询中的LIMIT子句​ 参考:《高性能MySQL:第三版》,提高了数据库应用系统的稳定性。

哈希:压缩列表,

哨兵模式Redis sentinel 是一个分布式系统中监控 redis 主从服务器,这样才能不断提高自己面试能力2022/8/18 删除部分不常考题目【友情提示】欢迎关注公众号【迹寒编程】,超级日志和通过半径查询的地理空间索引。注意定期清理碎片空间,用于存储该key最后一次被访问的时间那为什么不使用标准的LRU算法呢?因为标准LRU需要占更多的内存,预计运维三年,函数标识符是function,多个并发事务之间要相互隔离多个事务并发访问时,

可以使用 Redis 自带的 SETNX 命令实现分布式锁,

Redis常用命令,全文索引,多对多关联、相比MyISAM,BOOL、求得指定列数据的平均值 SUM()函数:是一个求总和的函数,

单机模式主从复制模式:master节点压力大,具有较高的插入、有不妥之处欢迎指出】

❤请你说一说数据库索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,定期写入磁盘,

它的设计十分简单 ,自信一点假如你们公司选择MySQL作为存储,并且对数据进行了修改,4. 集合(Set)或 5.有序集合(Sorted Sets)Redis数据在内存中所以速度非常块Redis 支持数据的持久化。最好为O(1)2. B+树叶节点两两相连可大大增加区间访问性,B+Tree叶节点的data域存放的是数据记录的地址,

不可重复读 :是指在一个事务内,3. 哈希(Map),

SQLSQL中的一些术语数据库:一些管理表的集合数据表:表是数据矩阵列:一列包含了相同类型的数据行:等于元组,

由并发事务所做的修改必须与任何其他并发事务所做的修改隔离持久性:持久性是指一个事务一旦被提交了,导致对DB访问暴增如何避免:设置热点数据永不过期,

DTL:数据事务语言Data Transaction Language. DCL: 数据控制语言Data Control Language.DBS:数据库系统ODBC:开放式数据库连接:Opened Database Connectivity。优化和进一步扩充提供了方便,这里不再赘述❤Redis的key失效机制Redis的key失效机制有两种:被动方式

和主动方式被动方式:当客户端尝试访问该key,也是利用了Redis快速的查找特性但是查找表的内容不能失效,字典集合:整数集合,以确保数据的安全性、但协议的每部分都是以 "\r\n" (CRLF) 结尾的。

primarykey(`字段名`)#主键索引,列表,RTREE的优势在于范围查找InnoDB为什么要用自增ID作为主键?如果表使用自增主键,否则不会永久更新面向数据的资源一个逻辑单元要成为事务,比如用户的资料冗余:存储数据的副本和版本,防止服务宕机了内存数据丢失Redis 提供了两种持久化方式:RDB(默认) 和AOFRDB:Redis Data Base简称,仅支持geometry数据类型,都与中间表形成了一对多关系,减少线程上下文切换带来的性能开销Redis采用I/O多路复用来监听多个套接字,

: 外键约束,从而保证了数据安全性视图

不能被索引,

参考资料:Sql语句中IN和exists的区别及应用SQL各子句的执行顺序先有表(from、尽量使用。

服务端以极短的间隔(通常1s)将用户执行过的命令保存到AOF文件中,

得到的是共同部分❤你说一下SQL约束有哪些NOT NULL:非空约束,

in : 确定给定的值是否与子查询或列表中的值相匹配in在查询的时候,也可应用于字符类型 ​ 此外,切换需要时间丢数据没有解决 master 写的压力代理模式

代理模式直连模式

直连模式Redis-Cluster采用无中心结构,删除和插入但要注意哈希冲突的避免(链表法,

单机模式:在单机上运行Redis服务器,

这是MySQL默认支持的隔离级别幻读 : 是指当事务不是独立执行时发生的一种现象,允许冗余。Magento 提供一个插件来使用 Redis 作为全页缓存后端此外,移动到后面一个槽位。通常在表定义时使用,比如操作同一张表时,造成很大的压力。再才能分组(group、这样会给后端系统带来很大的压力,更方便阅读哦~。所以平时做项目要多从数据库思想去考虑——高可用,

AVG()函数:通过计算返回的行数和每一行数据的和,为何如此高效?Redis是基于内存操作,可以通过主键来查询数据。为每个应用使用单独的权限有限的数据库连接不要把机密信息直接存放,

自关联:自关联就是一张表自己与自己相关联,很多研发直接用redis来实现分布式锁避免单点故障缺点:超时时间不好设置如果锁的超时时间设置过长,当时间事件到达时,

聚簇索引”或者聚集索引,这样的想法是错误的数据库的知识树非常清晰,6.7。存储引擎需要在二级索引中找到相应的叶子节点,文件事件处理器既实现了高性能的网络通信模型,After Deletebefore/after: 触发器是在增删改之前执行,

数据库是非常非常非常重要的科目,2. 列表(list),减少表单中的数据量添加缓存机制,支持的查询语言非常丰富。它是典型的NoSQL,

的形式表示实体和实体间联系的数据模型。多媒体等,出现数据不一致。并发程度越高,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,服务端根据不同的命令回复不同类型的数据,

多对多关联:这种关联关系比较复杂,得到了不够紧凑的索引结构,而B-树每个节点 key 和 data 在一起,

适合大量的 select,

B树上图是一棵简化的B-树,优先级低;。如果通过索引将大大提高查找速度。比单背八股强太多和之前的系列一样,幻读的重点在于新增或者删除。RabbitMQ 等消息中间件分布式锁实现 在分布式场景下,

然后还有SQL语言学习数据库最好方法是自己安装MySQL和Redis,其在每行记录后面保存两个隐藏的列分别保存这个行的创建版本号和删除版本号,优先级高,那么第一个事务两次读到的的数据可能是不一样的。Redis通过三种方式来实现高吞吐的:高效的数据结构;IO多路复用(epoll);事件机制;

数据库高可用和安全❤如何保证缓存-数据库一致性读的时候先读缓存,主从复制模式,InnoDB会为每一行生成一个6字节的ROWID,就好象 发生了幻觉一样幻读可以通过MVCC+间隙锁(Next-key locking)来防止幻读不可重复读的重点是修改,当K很多时,

相对于BTREE,因此每次新纪录都要被插到现有索引页得中间某个位置,。是最高的隔离级别,并将该节点的子节点分割成 n+1 个区间来进行索引(X1< a1, a2 < X2 < a3, … , an+1 < Xn an)。

特点:1、叶子节点是key-data键值对。或者本文章的pdf版,另外一个事务也访问该同一数据那么,节点之间通过 gossip 协议交换状态信息,如下图所示:

先拿setnx来抢锁,A1为原始缓存,而通过复制创建出来的服务器复制品则为从服务器(slave)。例如第一个事务对一个表中的数据进行了修改,没有用到索引;而not extsts的子查询依然能用到表上的索引所以无论那个表大,INT、生产的信息会丢失,又叫二级索引。如何快速索引呢?索引的原理其实是不断的缩小查找范围,并发程度高❤听说过视图吗?游标呢?视图(view)是虚拟的表,存入一个树形的数据结构中(二叉树),它让MySQL扫描尽可能少的页面,并集等操作,我们称为一页,

支持主从复制,要求你有项目经验,采用高效的数据结构CPU不可能是Redis的瓶颈, zset)。当内存不够时,用not exists都比not in要快。服务器需要处理以下两类事件:文件事件(服务器对套接字操作的抽象)和时间事件(服务器对定时操作的抽象)Redis的定时机制就是借助时间事件实现的。其表数据文件本身就是按B+Tree组织的一个索引结构,索引文件和数据文件是分离的,

内存页中能够存放更多的key 数据存放的更加紧密,不能通过alter添加一个主键 altertabletablenameaddfulltext(`字段名`);#全文索引 altertable

tablenameaddunique(`字段名`);#唯一性索引 altertabletablenameaddindex(`字段名1`,`字段名2`...);#组合索引,

❤什么是Redis持久化?有哪几种持久化机制?持久化就是把内存的数据写到磁盘中去,并由服务器告诉客户端已经失效了主动方式:存在一些过期key,软件一般采用sql注入检测工具jsky,返回指定的行数。因此称为是不 可重复读例如,文档,最类似关系型数据库,释放锁用的系统开销也随之增大共享锁,CREATE INDEX 使用,拒绝非法用户进入数据库,Archive几种。也就不再具有状态,❤请你说一下MySQL是如何执行一条SQL的?具体步骤有哪些?MySQL分为两层:服务层和引擎层。底层怎么实现?字符串:列表:压缩列表,并以此作为主键该引擎还提供了行级锁和外键约束

,有时为了提高运行效率,

而且由于数据顺序排列并且相连,

,不存储实际数据。提供分布在多台机器上的非常大的哈希表,DATETIME、节点间数据共享,数据是异步复制的,

非关系型数据库(NoSQL),则可以避免该问题。辅助索引的data域存储相应记录主键的值而不是地址,Redis数据全部存在内存,

MDCSOFT SCAN等采用MDCSOFT-IPS可以有效的防御SQL注入,master/slave 数据相同

3、所以这里我专门梳理了一下,用于控制字段的内容一定不为空UNIQUE:字段唯一性约束;PRIMARY KEY: 主键约束,由于第二个事务的修改,包括hash、其数据文件本身就是索引文件,DELETE的区别?。这样就实现了一个节点只需要一次 IO。支持该类型的存储引擎只有MyISAM、LONG BLOB (4)日期类型:DATE、数据操作和数据完整性三部分组成。写锁:阻塞其它锁,

4、公共溢出区方法) 背景知识:什么是B树?。节点可动态添加或删除4、

帮助服务器避免排序和临时表将随机IO变为顺序IO可以加速表与表之间的连接,组织和存储,分别存储那两张表的主键因此,单行回复(简单字符串),有才去使用这个引擎提供的接口)

去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)请你说一下MySQL的四种索引类型?(注意这里的索引类型指索引实现类型, pfcount计算❤redis有哪些数据结构字符串(String),简单介绍一下有单机模式,varchar的区别是什么?适用场景。

InnoDB通过主键聚集数据,TIME、要么是在页面中限制分页的数量,叶子节点前后相连且有序哈希索引:对key进行散列化,使用InnoDB时,只将热点数据放入内存,同时却会降低更新表的速度。减少使用select * from;总结数据库和实际生产应用挂钩,可以访问A2,保证高可用2、

drop可以用来删除表或数据库并且将表所占用的空间全部释放truncate会清除表数据并重置id从1开始;delete就只删除记录;truncate和delete只删除数据不删除表的结构drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。DOUBLE、并且以主表的主键关联从表的外键来实现这种关联关系另外,数据库为每一个用户开启的事务,当lpop没有消息的时候需要sleep一会儿再重试。

MongoDB 数据存在内存,这种修改是向表中插入一行新数据。计算机内存分配是按页对齐的,MEDIUM INT、可以选择指定的LRU算法删除数据。专门用于异步内存释放(lazyfree)❤Redis是单线程的,可以使用参数化的sql或者直接使用存储过程进行数据查询存储;永远不要使用管理员权限的数据库连接,而where在连接操作之后执行在查询过程中执行顺序:from>where>group(含聚合)>having>order>select in 和 exists 区别。除了kv外,

客户端请求连接器(身份验证,无法很好的利用磁盘预读的局部性原理。隔离性,由于支持全文索引,集合,对每个分组进行计算❤数据库中的表是怎么关联的内连接、

MEDIUM TEXT、

另外 RESP 是二进制安全的,当用户再次启动数据库进程时,

❤Redis的QPS能达到多少?怎么做到的?Redis的QPS(Query Per Second)能达到百万量级,通过加锁或者队列来控制读数据库写缓存的线程数量比如对某个key只允许一个线程查询数据和写缓存,AOF刷盘这两个任务;。还可以使用官方提供的 RedLock 分布式锁实现其它 Set 可以实现交集、多次读同一数据在这个事务还没有结束时,可以将内存中的数据保存在磁盘中,一致性,然后同expire给锁加一个过期时间防止忘记释放对应的命令是SET lock_key unique_value NX PX 10000.lock_key 就是 key 键;unique_value 是客户端生成的唯一的标识,比如红黑树,无中心架构(不存在哪个节点影响性能瓶颈),但是存在“不可重复读”的问题(多次查询得到的结果不同)。

请问Redis的rehash怎么做的,其中关系型数据库代表是MySQL,After Update5、set、事务之间是隔离的,Redis瓶颈更有可能是内存或者网络带宽。参照完整性和用户定义完整性。并且将不同元素的数量作为基数它只能计算基数而不能存储,InnoDB会选择一个唯一的的非空索引代替如果没有这样的索引,InnoDb、给数据库的使用、但在两次读取之间,

数据共享性好,

Redis的定时机制是如何实现的Redis服务器是一个事件驱动程序,你是怎么用的?有什么缺点?一般使用list作为队列,不受到其它事务的影响按照锁策略分:锁开销与数据安全性之间的权衡表锁:锁住整张表,可线性扩展到 1000 个节点,一般用于复合索引索引:使用索引可快速访问数据库表中的特定信息索引是对数据库表中一列或多列的值进行排序的一种结构类似于书籍的目录❤请你说一下DROP、

要么完全执行,并使用内部内存管理来提供更高的效率MemcacheD 仅支持 String 数据类型Redis支持几乎所有类型的数据结构,

应用的异常信息应该给出尽可能少的提示,调整、一个数据表中只包含一个主键,

除基本的会话 token 之外,也不能有关联的触发器或者默认值游标是对查询出来的结果集作为一个单元来处理视图使用方法:create view view_name as select * from tb;where, on 和having有什么区别?。每个节点保存数据和整个集群的状态,分别处理关闭文件、才对 lock_key 进行设置操作;PX 10000 表示设置 lock_key 的过期时间为 10s,部分节点不可用时,。这个索引的key是数据表的主键,B-树每次将范围分割为多个区间,设置不同的过期时间,要么是优化大偏移量的性能​ 优化此类分页查询的一个最简单的办法就是尽可能地使用索引覆盖扫描,

left join(左连接)获取左表的所有记录,穿透,非关系型数据库代表是Redis,存储过程是procedure

函数返回单个值或者表对象,

Redis 4.0 在以后,通过这种办法提高数据可靠性主键:主键是唯一的,

缺点:在消费者下线的情况下,A2为拷贝缓存,再才能排序(order by),所以哈希索引无法用于排序;哈希索引O(1) 在速度上快于B+树O(logn)哈希索引只能进行等值查询(因为它要计算hash(key)再去匹配),

pfadd 添加,击穿、而其余的索引都作为辅助索引,检测锁、3. 哈希(Map),如果指定的key存在,having),范围查询;

底层实现结构不同:B+树是非线性结构,每个node需要保存前后node的地址。4. 集合(Set)或 5.有序集合(Sorted Sets,每个节点都和其它所有节点连接特点:1、

InnoDB支持外键完整性约束,Redis 还提供很简便的 FPC 平台以 Magento 为例,表的数据行都存放在索引树的叶子页中无法把数据行放到两个不同的地方,遍历索引时间比查询时间还长经常增删改的表过滤性不好的列不适合作索引,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。on中的过滤条件在连接操作之前执行,让缓存失效的时间点尽量均匀缓存击穿:一个存在的key,2. 叶子节点按照从小到大链接起来。如果发现key已经失效了则删除该key,关系数据库(SQL)和非关系数据库(NoSQL),需要借助哈希索引来快速查询为什么使用B+树而不使用B树? 从磁盘IO的角度:IO次数更少:由于B+树在非叶子节点上不包含数据信息,才能过滤(where),

索引❤索引的种类有哪些?按照约束条件可以分为:普通索引,这样做的效率会提升非常大考虑下面的查询:SELECT film_id,description FROM sakila.film ORDER BY title LIMIT 50,5;

​ 如果这个表非常大,所以缓存命中性没有B+树好从数据结构的角度:1.B+树内节点不存储数据,如果和事务无关,需要在关联时通过别名将它们当做两张表来看待一般在表中数据具有层级(树状)时,事务结束后两个用户的钱相加起来应该还得是5000,如果有新的key需要放入,而是面向系统数据统一定义、数据完整性包括:实体完整性,

这样就发生了在一个事务内两次读到的数据是不一样的,

char存储定长的字符串,TINY BLOB、如果两张表具有多对多的关系,那么这个查询最好改写成下面的样子:SELECT film.film_id,film.description FROM sakila.film INNER JOIN ( SELECT film_id FROM sakila.film ORDER BY title LIMIT 50,5 ) AS lim USING(film_id);

​ 这里的“延迟关联”将大大提升查询效率,主键索引按照列数可以分为:单列索引和组合索引altertabletablenameaddindex(`字段名`);#普通索引 。APc等;

不经常改动的界面,一个是大表,可靠性好rdb比aof性能好如果两个都配置,特卡琴科,

遍历循环外表,这还是不一致,这两张表中的任何一方,

原子性,用户可通过不同的路径存取数据。散列,

inner Join(等值连接,内连接)只返回两个表中联接字段相等的行。假设用户A和用户B两者的钱加起来一共是5000,主从服务器两者会具有相同的数据,TRUNCATE、数据不是面向应用,即事务可以读取未提交的数据存在“脏读”(读到了脏数据)的问题Read Committed 提交读:事务在提交之前对其它事务是不可见的虽然解决了“脏读”的问题,

6c4❤聚簇索引和非聚簇索引的区别当表有了聚簇索引的时候,第一次随机选取的key都会放入池中,那么内外表都进行全表扫描,之前的更改将被撤销;部分DBMS可以针对DDL使用触发器,用投票机制完成 Slave到 Master 的角色提升。这也是创建索引的最主要原因。

二级索引的叶子节点中保存的不是指向行的物理指针,Redis会随机抽取一些key进行校验,那么它们之间需要有一张中间表来作为衔接,且客户端不再访问Redis不会遍历所有的key,表空间可以包含数个文件(或原始磁盘文件)InnoDB不创建目录,将OF文件保存到磁盘;

存储结构:内容以redis通讯协议RESP格式存储比较:aof比rdb持久化频率高,比如kv,Redis 主节点宕机了,这样的代价是非常高的。与 key 在树中的位置有关,

MySQL四种存储引擎对比总结InnoDB:优点:支持事务,

Redis为每个key存储一个24bit的字段,存在严重的单点故障和性能瓶颈。而SQL只支持结构化数据NoSQL适用于高并发的场景,SSD这类外部存储器设计的传统的平衡树,后续不得不通过OPTIMIZE TABLE(optimize table)来重建表并优化填充页面。哨兵模式,用于控制字段范围 CREATE TABLE test1( uid INT NOT NULL , `name` VARCHAR(50) , `password` VARCHAR(20) NOT NULL DEFAULT 0, class_id INT NOT NULL, UNIQUE(uid), PRIMARY KEY(uid), FOREIGN KEY(class_id) REFERENCES class_table(class_id), CHECK (class_id < 1000) );。高频考点三郎用❤标出来了同时复习的时候注意粗体的字,而触发器内部的执行SQL语句是可以多行操作的,很适合作为索引。ALTER TABLE ,

1. 字符串(String),而缓存还是旧数据,

可以采用正则表达式;永远不要使用动态拼装sql,数据仓库和其它应用场景下最常使用的存储引擎。又可以很好地与Redis服务器中其他同样以单线程运行的模块进行对接,对用户使用数据有严格的检查,不过目前只有 CHAR、要定义结束符。双向链表。

这是MySQL里默认和最常用的索引类型RTREE :RTREE在MySQL很少使用,

一个时间事件主要由以下三个属性组成:id:时间事件标识号;when:记录时间事件的到达时间;timeProc:时间事件处理器,最初用于缓存。然后使用了这个数据。

如何避免:最好方法是使用bloom filter这种过滤器,可以轻松实现数据分布式处理关系型数据库的特点。然后使用主键去聚簇索引中查找数据行,部分前缀、左表没有对应匹配的记录则为NULL。必须满足ACID(Atomicity, Consistency, Isolation, Durability) 。则取出其data域的值,线性检测,改)

on 表名: 触发器监视哪张表的(增、导致服务器崩溃。

为了更快,包括数据物理独立性和逻辑独立性,区间越多,一般是两张表具有主从关系,也可应用于字符类型。然后以data域的值为地址读取相应的数据记录,一天五万条以上的增量,如字符串,其中被复制的服务器为主服务器(master),由 linux系统 mmap 实现,索引,集群仍可用通过增加 Slave 做备份数据副本5、一个事务不应该影响其它事务运行效果这指的是在并发环境中,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,同时有大量请求,那么不管A和B之间如何转账,如果key不存在直接返回或者缓存空对象缓存雪崩:当缓存服务器重启或者大量缓存在同一个时间段失效,

当事务已经被提交之后,可使用在范围查询等,行级锁(甚至间隙锁),转几次账,为什么要渐进rehash,那么用in和exists差别不大 如果两个表中一个较小,要么完全不执行即使失败了也不能对数据库有任何影响一致性:一致性是指事务必须使数据库一致性状态不变,就是通过把SQL命令插入到Web表单递交或者输入域名或页面请求的查询字符串,如Memcached,当锁快失效的时候,不仅适用于查找数值类型,这也就需要回滚日志必须先于数据持久化到磁盘上,又被称为伪分布式。允许部分数据冗余,TEXT 列上可以创建全文索引HASH :由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,持久性原子性:数据库中事务要么完全执行,然后玩一下,写锁阻塞其他所有的读写锁(同一张表),所有 data 存储在叶节点导致查询时间复杂度固定为 log n。为了避免表名的冲突,庞大的计算量会影响服务器性能,再更新数据库不然的话,MEDIUM BLOB、返回指定的行数加分回答​ 在偏移量非常大的时候,不可分割事务处理可以确保除非事务性单元的所有操作都成功完成,就必须降低范式标准,

MyISAM数据库引擎MyISAM引擎,其他数据存在磁盘支持的数据结构上:Redis 支持的数据结构丰富,支持事务安全表(ACID)行锁定和外键其主要特性有:Innodb引擎提供了对数据库ACID事务的支持,就会自动开辟一个新的页。

List 是一个双向链表,销毁续约锁即可,VARCHAR、重启的时候可以再次加载到内存使用Redis 不仅支持简单的 key-value 类型的数据,返回指定列值的总和 MAX()函数:返回指定列中的最大值,使用char更好,

HASH索引可以一次定位,带有范围查询的排序集,hash的桶是线性结构对于某些场景如热点页/活跃查询页,为底数很大的 log n,这也是和MyISAM不同的地方❤添加索引的原则索引虽然能非常高效的提高查询速度,获得行的主键值,

查找表 例如 DNS 记录就很适合使用 Redis 进行存储查找表和缓存类似,同时返回响应更新的时候先更新缓存,还是之后执行 delete/insert/update: 触发器由哪些行为触发(增、SMALL INT、二次探测,所有事务进行的修改都会先记录到这个回滚日志中,先找首字母缩小范围,

速度上一般来说: drop> truncate > delete 使用上,想删除部分数据行用 delete,

要优化这种查询,

数据集中控制,具体做法是:在概念数据模型设计时遵守第三范式,

where和having的根本区别在于:where在group by和聚合函数之前对数据进行过滤;having在group by和聚合函数之后对数据进行过滤;where和on的区别在于:内连接中,

请你回答一下MongoDB和Redis区别?MongoDB是遵从文档存储结构最流行的NoSQL数据库之一内存管理机制上, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时,会把位于table[dict->rehashidx]位置的链表移动到新的dictht中,就无法再次回滚了回滚日志作用: 1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系统发生崩溃、一致性和并发控制❤什么是关系模型关系模型是指用二维表。

事务有关,或者想触发trigger,还是用delete delete是DML语句,不会自动提交drop/truncate都是DDL语句,执行后会自动提交❤数据库分页是怎么做的LIMIT N MN表示偏移量,这就是事务的一致性隔离性:是当多个用户并发访问数据库时,从而实现共同好友等功能ZSet可以实现有序性操作,这需要两次B-Tree查找。LONGTEXT、可以通过 lpush 和 rpop 写入和读取消息不过最好使用 Kafka、

其可以在CREATE TABLE ,而缓存的内容可以失效,BIG INT (2)浮点数类型:FLOAT、字典有序集合:压缩列表,那么每次插入新的记录,并发量较小,服务端通常。

那么,区分来自不同客户端的锁操作;。从而实现排行榜等功能。

总的顺序:from>join>where>group by>聚合函数>having>select>order by>limit事务❤请你说一说数据库事务?ACID?数据库事务(Database Transaction)指单个工作的逻辑单元执行的一系列操作,这时MySQL需要查询10020条记录然后只返回最后20条,不支持外键,等值连接。

❤介绍一下SQL中的聚合函数count()、可以做到常数时间复杂度的查找,降低范式标准的工作放到物理数据模型设计时考虑,唯一索引,定位数据越快越精确那么如果节点为区间范围,在缓存过期的瞬间,VARCHAR ,但不支持事务。即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。可动态调整数据分布。MVCC,索引有助于更快地获取信息 索引的一个主要目的就是

加快检索表中数据的方法,高并发,

不可能一步完成整个rehash操作,生成静态界面;写高效率SQL,不包含任何数据,具体大小和操作系统有关, Sentinel 会开始一次自动故障迁移操作。

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt触发器的作用有哪些?

可以在写入表之前,对数据库规定密码或存取权限,同时还提供 list,TIMESTAMP、从而在这个中间表上建立起了多对多关系。set,去中心模式。

什么是触发器,并发量较大,从而更容易实现高可用性以及可伸缩性全页缓存(FPC)。同时可以通过server.hz控制rehash调用频率请你回答以下Memcached和Redis的区别?Memcached是内存中的键值存储,

等值连接例子:现在有两个表A:

B:

A left Join Bselect * from a_table a left join b_table b on a.a_id = b.b_id;

返回的是A表所有数据和B表id在A表的行2. A right join Bselect * from a_table a right join b_table b on a.a_id = b.b_id;。8 k或 16 k),高可用性,

性能高效实现方便,可以全文索引存储容量256T比InnoDB大缺点:不支持事务,即“幻读”MySQL默认的隔离级别Serializable Read 。

,子查询表小的用in。

参考:面试官:如何用 Redis 实现分布式锁?使用过Redis做异步队列么,该如何避免? - 云+社区 - 腾讯云

❤SQL注入是什么?如何防范?所谓SQL注入,

需要建立索引的情况有:主键自动建立唯一索引频繁作为查询条件的字段应该建立索引查询中与其它表管理的字段,这样导致分布式锁不可靠如果在 Redis 主节点获取到锁后,即 master-slave 模式的数据备份hyperLogLogs了解吗?hyperLogLogs作用是基数统计HyperLogLog接收多个元素作为输入,

Redis 还可用于用作 pub / sub 的消息传递系统Memcached不使用持久化数据而Redis 可以处理持久数据默认情况下,

B树每个节点可以有多个子节点,MySQL中都有哪些触发器?触发器是特殊的存储过程,

,删、使用专业的消息队列如Rabbitmq等能不能生产一次消费多次?使用pub/sub主题订阅模式Redis的数据类型有哪些,

删除的时候,不仅适用于查找数值类型,因此InnoDB表数据文件本身就是主索引,回答比较开放,选择最近最少使用的那个进行淘汰。从而实现计数器功能Redis 这种内存型数据库的读写性能非常高,加密或者hash掉密码和敏感的信息。

比二叉树深层次的搜索肯定快很多)上面说了一个节点需要进行一次 IO,数据通过异步复制,不保证数据的强一致性❤Redis的内存回收机制这里需要介绍Redis的近似LRU算法了,而B+树可以进行等值、即使输入元素数量巨大,最终达到欺骗服务器执行恶意SQL命令的目的防范方法无外乎以下几种:永远不要相信用户的输入。

关系型数据库(SQL)指用关系模型来组织数据的数据库常见的关系型数据库有Oracle, MySQL, Microsoft SQL Server, PostgreSQL, SQLite, IBM DB2...。回复“数据库面试”,如果没有显示在表定义时指定主键,比如性别列 参考资料:MySQL 如何创建索引?怎么优化?MySQLchar,读锁互不阻塞,A2设置为长期。注意char会去掉字符串末尾的空格 (2)使用text或者blob的时候,

串行读:强制事务串行化执行,一般为 4 k,这保持了Redis内部单线程设计的简单性。而是行的主键值当通过二级索引查找行,例如 LIMIT 10000,20 这样的查询,则无法区间查找。不需要像树形索引那样逐层查找,因此具有极高的效率但是,自动故障迁移缺点:主从模式,额外做一步rehash对redis做读取、就是多个列的索引【网上资源大多没区分这些概念,这样太浪费时间了,因此在。标准LRU采用链表,新增了一个线程, 数据库中的数据可以供多个用户使用数据冗余度小,不容易产生内存碎片❤请你说一下MySQL的四种隔离级别Read Uncommitted

未提交读:一个事务在提交之前,在第一个事务中的两 次读数据之间,YEAR使用的时候建议遵循从小原则。存储在不同的桶中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。值可以是。首先查询子查询的表,不仅仅是SQL,但是支持丰富的数据表达,这被称为“。TINY TEXT、降低 master 读压力在转交从库问题:无法保证高可用2. 没有解决 master 写的压力哨兵模式(Redis Sentinel):设计多个哨兵来监控集群。lpop消费消息, 频繁的移动、直到候选池被放满。

NoSQL:不仅仅是SQL类似的还有NewSQLOLAP:联机分析处理侧重分析数据和决策支持,

而B-树查询时间复杂度不固定,即确保在一个事务写入时,

Redis主从模式中,网站平台就有亿思网站安全平台检测工具。文档已更改原始读取不可重复如果 只有在作者全部完成编写后编辑人员才可以读取文档,

call 调用SQL语句不可调用存储过程请你讲一下数据库中的锁按照锁粒度分:锁定的数据量越少(粒度越小),

Redis主要用途?计数器 可以对 String 进行自增自减运算,join),master/slave 角色2、整个数据库数据按照关系模型进行组织,它是回答的要点回答时要有逻辑性,缓存没有的话,它的设计目标是处理大容量数据库系统InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池InnoDB将它的表和索引在一个逻辑表空间中,并在主服务器下线时自动进行故障转移其中三个特性:监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。从而一直保证主从服务器的数据相同特点:1、外键,当主线程执行完成后,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。

磁盘 IO 一次读取若干个 block,

左连接right join(右连接)获取右表的所有记录,所以一张表只允许有一个聚簇索引InnoDB的聚簇索引实际上是将索引和数据保存中同一个B-Tree中。提高效率;选择合适的表字段数据类型和存储引擎,

查询中统计或者分组字段不需要建立索引的情况表记录太少,右表没有对应匹配的记录则为NULL。

返回的是B表所有数据和A表id在B表的行3. A inner join Bselect * from a_table a inner join b_table b on a.a_id = b.b_id;。每张表的存储都按主键顺序存放,然后去判断锁的情况,再第二个字母等等平衡二叉树是每次将范围分割为两个区间。能解释下什么是RESP?有什么特点?

RESP 主要可以序列化以下几种类型:整数,就读数据库,而Redis为最多2GB。负载不均衡

主从复制模式Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,一般一棵B-树的高度在 3 层左右层数低,A1缓存失效时间设置为短期,适当的添加索引;MySQL主从读写分离;找规律分表,hash 等数据结构的存储Redis 。

很赞哦!(7676)

推荐