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自问自答-数据库的更多相关文章

  1. jacky自问自答-java并发编程

    1.java Web中线程不是由tomcat这类web容器负责的吗?为什么还要我控制多线程? 答:这个问题很多初学者都会有的疑惑,举一个我以前做的一个需求,java作为中间平台,是socket服务端, ...

  2. 区块链自问自答 day1

    区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 ​ 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...

  3. [python]自问自答:python -m参数?

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  4. 自问自答之VR遐想

    先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...

  5. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  6. [python]自问自答:python -m参数? (转) ( python2.7 版本 )

    原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...

  7. css自问自答(二)

    css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...

  8. css自问自答(一)

    css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...

  9. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

随机推荐

  1. CEF 各个版本适应的平台参考表

    This Wiki page provides information about CEF branches and instructions for downloading, building an ...

  2. ZOJ 2314 有上下界的网络流

    problemCode=2314">点击打开链接 题意:给定m条边和n个节点.每条边最少的流量和最多的流量.保证每一个节点的出入流量和相等,问能够形成吗,能够则输出每条边的流量 思路: ...

  3. 着重protected、default区别

    public是所有,在哪都可以访问private是私有,仅在自己类里面可以访问protected是自己包里面可以访问,如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类.default也是 ...

  4. JavaScript 设计模式之单例模式

    一.单例模式概念解读 1.单例模式概念文字解读 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在Ja ...

  5. 走进 Realm 的世界

    来源:XcodeMen(郭杰) 链接:http://www.jianshu.com/p/0e248f000405 本文由我们团队的郭杰童鞋分享. Realm是什么 Realm是由Y Combinato ...

  6. FastJSON使用案例(fastjson-1.1.28.jar)

    import java.util.List; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; ...

  7. 【Linux】正确的关机方法

    1)shutdown命令 我们较常使用的是shutdown这个命令,这个命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息.该命令还允许用户指定一个时间参数 ...

  8. api 和 C# 里的接口的区别?

    从狭义上讲,接口指的是借由 interface 定义的结构,接口中只对方法做定义,不做实现.具体实现由最终实现接口的类提供. interface 作为一种类型,可以用于定义方法,我们只关心类实现了接口 ...

  9. Android: ListView数据的分批加载 以及 Handle 总结

    这是效果图: activity_main.xml 01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ ...

  10. 用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)

    在安装好的opencv文件夹下找到路径:opencv245\opencv\3rdparty\ffmpeg,此路径下有一个readme.txt文件,内容例如以下所看到的: The build scrip ...