面试题【数据库】

1、 列举常见的关系型数据库和非关系型都有那些?

关系型:Mysql / Oracle / SQL Server
非关系型:redis / MongoDB…
关系型数据库:采用关系模型来组织数据结构的数据库(二维表)
非关系型数据库(Nosql):严格上不是一种数据库,应该是一种数据结构化存储方法的集合
	NoSql的分类:
        1.键值型数据库  (Redis)
        2.文档型数据库  (MongoDB)
        3.列存储数据库  (HBase)
        4.图形数据库    

2、MySQL常见数据库引擎及比较?

常见引擎:ISAM,MyISAM,InnoDB
区别:
MyISAM类型的数据文件有三个1.frm(结构)2.MYD(数据)、3.MYI(索引)
MyISAM类型中的表数据增 删 改速度快,不支持事务,没有InnoDB安全。
InnoDB类型的数据文件只有一个 .frm
InnoDB类型的表数据增 删 改速度没有MyISAM的快,但支持事务,相对安全。

3、简述数据三大范式?

1, 每一列只有一个值
2, 每一行都能区分。
3, 每一个表都不包含其他表已经包含的非主关键字信息。

4、 什么是事务?MySQL如何支持事务?

同时对一组数据进行操作的语句就成为事务
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

5、简述数据库设计中一对多和多对多的应用场景?

一对多:比如学生和班级的关系
多对多:比如学生和选修课之间的关系

6、 如何基于数据库实现商城商品计数器?

设置一个商品计数的列 自动递增为1

7、常见SQL(必备)
详见
8、简述触发器、函数、视图、存储过程?

触发器:触发器是一个特殊的存储过程,它是MySQL在insertupdatedelete的
	    时候自动执行的代码块。
函数:MySQL中提供了许多内置函数,还可以自定义函数
视图:视图是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影
存储过程:把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储
		  过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行
		  sql语句效率高)

9、MySQL索引种类

普通索引 - 加速查找
        	create index 索引名称 on  表(列名)
唯一索引 - 加速查找,约束列数据不能重复,null
        	create unique index  ...
主键索引 - 加速查找,约束列数据不能重复,不能null
        	
组合索引 - 多列可以创建一个索引文件 
			create index ix_name_email on in3(name,email)
                name,pwd
     - 普通组合索引:
                    无约束
                    name,pwd
     - 联合唯一索引:
                    有约束,两列数据同时不相同,才能插入,不然报错

10、 索引在什么情况下遵循最左前缀的规则?

联合索引
实例:
联合索引:name,pwd,email 
   select * xx where name ='alex'  会走索引
   select * xx where pwd ='alex'  不会走索引
   select * xx where email ='alex'   不会走索引
   select * xx where name='alex' and pwd='xx'  会走索引

11、主键和外键的区别?

主键外键索引
定 义唯一标识一条记录,不能有重复的,不允许为空表的外键是另一表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有一个空值
作用用来保证数据完整性用来和其他表建立联系用的是提高查询排序的速度
个数主键只能有一个一个表可以有多个外键一个表可以有多个惟一索引

12、MySQL常见的函数?

char_length():返回字符串的长度
concat(s1,s2,...):字符串拼接
upper()
lower()
...

13、 列举创建索引但是无法命中索引的8种情况。
详细情况
14、 如何开启慢日志查询?

1.查看慢查询是否开启
show variables like ‘slow_query%;
show variables like ‘long_query_time’;

2.打开慢查询
set global slow_query_log=ON;

3.设置慢查询日志记录文件
set global slow_query_log_file=/usr/slow.log ;

4.指定慢查询事件
set global long_query_time=1;

15、数据库导入导出命令(结构+数据)?

导出:
mysqldump -u root -p 库名 >导出的文件.sql

导入:
mysql -u root -p 库名

16、 数据库优化方案?

1.为经常查询的字段添加索引
2.减少外键关联查询
3.不建议使用 select * from t ,用具体的字段列表代替“*4.Update 语句,如果只更改12个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗

17、 char和varchar的区别?

char的长度是不可变的,而varchar的长度是可变的。
定义一个char(10)varchar(10),如果存入的是‘hello’,则char所占长度依然为10varchar所占长度为5

18、 简述MySQL的执行计划?

SQL执行计划,就是一条SQL语句,在数据库中实际执行的时候,一步步的分别都做了什么。就是我们用explain分析一条SQL语句时展示出来的那些信息

19、 在对name做了唯一索引前提下,简述以下区别:

 select * from tb where name = ‘Oldboy-Wupeiqi’  --取出所有name=‘xxx’的数据

 select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1 --只取出第一条name=‘xxx’的数据

20、1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?

当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,增加order by,并且order by字段需要建立索引。

21、 什么是索引合并?

1、索引合并是把几个索引的范围扫描合并成一个索引。
2、索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。
3、这些需要合并的索引只能是一个表的。不能对多表进行索引合并。

22、什么是覆盖索引?

就是select的数据列只用从索引中就能够取得,不必从数据表中读取,
换句话说查询列要被所使用的索引覆盖。

23、简述数据库读写分离?

24、简述数据库分库分表?(水平、垂直)

25、redis和memcached比较?
26、redis中数据库默认是多少个db 及作用?

redis默认有十六个db

27、python操作redis的模块?
28、如果redis中的某个列表中的数据量非常大,如何实现循环显示每一个值?

查询取出列表的值让后使用python循环

29、redis如何实现主从复制?以及数据同步机制?
30、redis中的sentinel的作用?
31、如何实现redis集群?
32、redis中默认有多少个哈希槽?
33、简述redis的有哪几种持久化策略及比较?
34、列举redis支持的过期策略。
35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
36、写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。
37、如何基于redis实现消息队列?
38、如何基于redis实现发布和订阅?以及发布订阅和消息队列的区别?
39、什么是codis及作用?
40、什么是twemproxy及作用?
41、写代码实现redis事务操作。
42、redis中的watch的命令的作用?
43、基于redis如何实现商城商品数量计数器?
44、简述redis分布式锁和redlock的实现机制。
45、什么是一致性哈希?Python中是否有相应模块?
46、如何高效的找到redis中所有以oldboy开头的key?

oldboy*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值