关系型数据库

1.mysql的架构?

①连接池:管理、缓存用户的链接,线程处理需要缓存的需求。
②管理服务和工作组件:系统管理和控制工具,如备份恢复、Mysql复制、集群等。
③sql接口:接受用户的sql命令,返回用户需要的结果。
④查询解析器:SQL命令传递到解析器的时候会被解析器验证和解析。
⑤查询优化器:SQL命令在查询之前会使用查询优化器对查询进行优化。
⑥缓存:如果查询缓存有命中的查询结果,那么查询语句就会去缓存中直接查询。
⑦插入存储引擎:存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。

2.索引的原理?

索引是一种高效获取数据的存储结构,如hash、二叉、红黑。
如执行select * from user where name = “吕布”,执行过程如下:
①找到name索引树
②根据name的值找到该树下叶子的name索引和主键值
③用主键值去主键索引树去叶子节点找到该条数据

3.索引的选取原则?

①在经常用作过滤器的字段上建立索引。
②在sql语句中经常进行group by、order by的字段上创建索引。
③在不同值较少的字段不必要创建索引,比如性别,状态,类型等字段。
④经常存取的列避免创建索引。
⑤用于关联的列(主键、外键)创建索引。
⑥创建索引帮助特定的查询,查看业务需求中那些字段频繁出现在where子句中的字段创建索引。

4.为什么索引导致查询效率高?操作数据效率低?

索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。
数据库中的记录更新或者写入的时候,会更新或者创建这条记录对应的索引,当然就会耗费时间和空间。

5.索引的底层结构是什么?是如何实现的?
6.索引类型?

Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
①FULLTEXT:全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。
②HASH:由于HASH的唯一及类似键值对的形式,很适合作为索引。
③BTREE:BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。
④RTREE:RTREE在MySQL很少使用,仅支持geometry数据类型。

7.聚集索引和非聚集索引?

聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。如果不创建索引,系统会自动创建一个隐含列作为表的聚集索引。
非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。

8.mysql索引的数据结构?

mysql索引的数据结构是树,常用的存储引擎innodb采用的是B+Tree。

9.数据库的隔离级别分别是什么?

任何支持事务的数据库,都必须具备四个特性,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
四种隔离级别:
①Read uncommitted:一个事务可以读取另一个未提交事务的数据。
②Read committed:一个事务要等另一个事务提交后才能读取数据。
③Repeatable read:在开始读取数据(事务开启)时,不再允许修改操作。
④Serializable 序列化:Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。

10.sql的优化方案?

①选择最适合的字段属性。
②尽量把字段设置为NOT NULL。
③使用连接(JOIN)来代替子查询。
④事务。
⑤使用外键。
⑥合理使用索引。
⑦用in代替or。

11.left join,right join,inner join,full join之间的区别?

sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同。
①inner join(内连接),在两张表进行连接查询时,只保留两张表中完全匹配的结果集。
②left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
③right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
④full join,在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。

12.主键和唯一索引有啥区别?

①主键为一种约束,唯一索引为一种索引,本质上就不同。
②主键创建后一定包含唯一性索引,而唯一索引不一定就是主键。
③主键不允许空值,唯一索引可以为空。
④一个表最多只能创建一个主键,而可以创建多个唯一索引。
⑤主键和索引都是键,主键是逻辑键,索引为物理键,即主键不实际存在。

非关系型数据库

13.关系型和非关系型数据库有哪些?

关系型数据库:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL。
非关系型数据库:NoSql、Cloudant、MongoDb、redis、HBase。

14.redis如何进行持久化?

两种持久化方式:AOF和RDB。持久化功能有效地避免因进程退出造成的数据丢失问题,下次重启时利用之前持久化的文件即可实现数据恢复。
RDB:RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。
AOF:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的。主要作用:解决了数据持久化的实时性。