jacky自问自答-数据库
1、exists和in有什么区别?
- EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False,而In子查询则是返回具体的数据值,与指定的字段比较
- EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用
- IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。(楼主还没搞清楚原理)
2、解释下SQL UNION 和 UNION ALL 操作符?
- union和union all的都是两张或多张表查询的结果集合并起来,union会掉重复的记录,unional不会去掉重复的记录。union和union all使用的要求是两个结果集的列数据相同,数据类型相同,顺序相同
3、一张表有3个字段,性别,姓名,年龄,用一条sql查询出男的有多少条,女的有多少条?
- select sex,count(*) from 表 group by 性别
或select sum( CASE WHEN sex = '男' THEN 1 ELSE 0 END ) 男数量,sum( CASE WHEN sex = '女' THEN 1 ELSE 0 END ) 女数量 from 表
4、一张员工表,有个两个字段,分别是员工姓名和工资,假设>=1000就一级,小于1000就2级,用一条sql查询出所有员工的等级?
- SELECT 姓名,
- CASE WHEN 工资 < 1000 THEN '2'
- WHEN 工资 >= 1000 THEN '1'
- ELSE NULL END 工资等级,
- FROM Table_A
参考:http://www.cnblogs.com/prefect/p/5746624.html
https://juejin.im/post/5a6873fbf265da3e393a97fa
5、MySQL中myisam与innodb的区别?
5.1、InnoDB支持事务,而MyISAM不支持事务
5.2、InnoDB支持行级锁,而MyISAM支持表级锁
5.3、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有 使用压缩从而会造成Innodb比MyISAM体积庞大不小
5.4、InnoDB支持外键,而MyISAM不支持
5.5、InnoDB不支持全文索引,而MyISAM支持。
6、mysql主从复制的原理?
6.1、 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog日志中;
6.2、 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 日志内容,放进 自己的relay log中;
6.3、 从:sql执行线程——执行relay log中的语句;
7、在mysql索引优化方面,你有什么经验,说一说?
索引本质上是一种基于存储引擎级别的数据结构,所以不能抛开存储引擎单单谈索引的原理,如果是myisam和innodb的存储引擎都是采用B+树这种数据结构,数据表记录节点都是按照键值大小顺序存放在同一层的叶子节点上,myisam和innodb不同的是myisam存储引擎叶节点的data域存放的是数据记录的地址
参考:http://blog.csdn.net/ifollowrivers/article/details/73614549
8、在使用redis的过程中,我们往往是必须先拿到数据,根据数据进行判断,进行一些处理后,再设置数值到redis服务器中,在这过程中,你怎么保证数据安全?
可以采用乐观锁,简单的来我们每取一个数据的时候,redis不只是返回数值,还会返回这个数值对应的版本号,再设置值的到redis时,先检查版本号,再设置更新,在redis命令的表现上就是取数据,操作数据之前,先watch数据。
9、redis是单线程的,一定可以保证数据安全吗 ?一定,为什么?不一定,什么情况下不安全?什么情况下安全?
不一定
不安全的情况:比如有个两个redis连接,在并发的情况下,可能取到同一个值,比如都取到10,然后在代码中+1,预期中是12,但是实际上可能是11
安全的情况:redis自增和自减命令
10、Redis的并发竞争问题如何解决了?解Redis事务的CAS操作吗?
http://www.cnblogs.com/520playboy/p/8481935.html
缓存机器增删如何对系统影响最小,一致性哈希的实现
11、Redis持久化的几种方式,优缺点是什么,怎么实现的?
reids有两种持久化方案,分别是rdb和aof
http://www.cnblogs.com/520playboy/p/6017414.html
12、Redis的缓存失效策略?
相关知识: redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
13、缓存穿透的解决办法?
缓存穿透是查一个一定不存在的数据,可能导致数据库挂掉
解决:http://www.cnblogs.com/520playboy/p/8249942.html
14、redis集群,高可用,原理
通过主从复制,通过在从机配置,一主两从,哨兵模式,主机挂点,从机自动升级为主机
15、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
比如用户数据。数据库有2000w条。
活跃用户:
redis sortSet里 放两天内(为方便取一天内活跃用户)登录过的用户,登录一次ZADD一次,如set已存在则覆盖其分数(登录时间)。键:login:users,值:分数 时间戳、value userid。设置一个周期任务,比如每天03:00:00点删除sort set中前一天3点前的数据(保证set不无序增长、留近一天内活跃用户)。
取时,拿到当前时间戳(int 10位),再减1天就可按分数范围取过去24h活跃用户。
16、mysql索引为什么使用B+树
先从数据结构的角度来答。
B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。
这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。
那么Mysql如何衡量查询效率呢?磁盘IO次数,提升mysql查询效率,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B+树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。这是优点之一。
另一个优点是什么,B+树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦
参考:https://www.cnblogs.com/xyxxs/p/4440187.html
17、数据库会死锁吗,举一个死锁的例子,mysql怎么解决死锁?
用Use SHOW INNODB STATUS来确定最后一个死锁的原因。这样可以帮助你调节应用程序来避免死锁。
http://sadwxqezc.github.io/HuangHuanBlog/mysql/2017/05/30/Innodb%E6%AD%BB%E9%94%81.html#3-工作中的另一个死锁case
18、悲观锁和乐观锁,应用中的案例,mysql当中怎么实现
https://blog.csdn.net/yifucc/article/details/79582277
jacky自问自答-数据库的更多相关文章
- jacky自问自答-java并发编程
1.java Web中线程不是由tomcat这类web容器负责的吗?为什么还要我控制多线程? 答:这个问题很多初学者都会有的疑惑,举一个我以前做的一个需求,java作为中间平台,是socket服务端, ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- 自问自答之VR遐想
先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- css自问自答(二)
css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...
- css自问自答(一)
css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
随机推荐
- mysql 设置密码
法一: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 方法二:1.用root 进入mysql后mysql>set password =password('你的密码 ...
- HDOJ 5242 Game
Game Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Java中网络相关API的应用——InetAddress&URL
一.InetAddress类 标识网络上的硬件资源 package com.homework; import java.net.InetAddress; import java.net.Unknown ...
- JavaScript中的闭包(closure)
闭包的特性 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露,主要用于私有的方法和变 ...
- Linux 查看登录日志及登录失败用户的ip-lastb
Linux 查看登录成功的用户信息 命令: last 最新的登录记录在最前面,所以可以用 一下命令来查看. last | less 查看登录失败的用户信息 命令: lastb 查看登录日志 命令: ...
- iOS设计模式:简单工厂模式
1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工 ...
- Linux 常用脚本
Linux 常用脚本 修改表列属性 sql可任意修改,若数据库正好在执行机器上,可去掉ip地址 echo 为输出 #!/bin/shfor((i=0;i<256;i++));do ...
- 阿里云ECS服务器Linux环境下配置php服务器(一)--基础配置篇
开始安装软件了,我们需要安装的软件有apache,php和MySQL. ps:如果你购买的是北京的服务器,有个安全组需要设置,我全部用的默认设置,暂时还没发现会有什么影响. 首先关闭SELINUX(S ...
- Python学习笔记015——序列(字节数组 bytearray)
1 序列 常见的序列有:list tuple str bytes(字节串) bytearray 2 字节数组bytearray 可变的字节序列,相当于bytes的可变版本. 3 创建函数by ...
- oc引入头文件
建立.h的头文件(header file)命名为Hi.h,源码如下: #ifndef oc3_Hi_h #define oc3_Hi_h void sayHi(); #endif 建立.c的头文件(c ...