22. 数据库中间件了解过吗,sharding jdbc,mycat?23. MYSQL的主从延迟,你怎么解决?
嘻嘻,先复习一下主从复制原理吧,如图:
主从复制分了五个步骤进行:
主从同步延迟的原因
一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取binlog的线程仅有一个,当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。
主从同步延迟的解决办法24. 说一下大表查询的优化方案25. 什么是数据库连接池?为什么需要数据库连接池呢?
连接池基本原理:数据库连接池原理:在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。
应用程序和数据库建立连接的过程:
数据库连接池好处:
26. 一条SQL语句在MySQL中如何执行的?
先看一下Mysql的逻辑架构图吧~
查询语句:
27. InnoDB引擎中的索引策略,了解过吗?
索引下推优化是 MySQL 5.6 引入的, 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
28. 数据库存储日期格式时,如何考虑时区转换问题?29. 一条sql执行过长的时间,你如何优化,从哪些方面入手?30. MYSQL数据库服务器性能分析的方法命令有哪些?31. Blob和text有什么区别?32. mysql里记录货币用什么字段类型比较好?33. Mysql中有哪几种锁,列举一下?
如果按锁粒度划分,有以下3种:
34. Hash索引和B+树区别是什么?你在设计索引是怎么抉择的?35. mysql 的内连接、左连接、右连接有什么区别?36. 说说MySQL 的基础架构图
Mysql逻辑架构图主要分三层:
37. 什么是内连接、外连接、交叉连接、笛卡尔积呢?38. 说一下数据库的三大范式39. mysql有关权限的表有哪几个呢?
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysqlinstalldb脚本初始化。这些权限表分别user,db,tablepriv,columnspriv和host。
40. Mysql的binlog有几种录入格式?分别有什么区别?
有三种格式哈,statement,row和mixed。
41. InnoDB引擎的4大特性,了解过吗42. 索引有哪些优缺点?
优点:
缺点:
43. 索引有哪几种类型?44. 创建索引有什么原则呢?45. 创建索引的三种方式
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`date` datetime DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE table_name ADD INDEX index_name (column);
CREATE INDEX index_name ON table_name (column);
46. 百万级别或以上的数据,你是如何删除的?47. 什么是最左前缀原则?什么是最左匹配原则?48. B树和B+树的区别,数据库为什么使用B+树而不是B树?49. 覆盖索引、回表等这些,了解过吗?50. B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据?51. 何时使用聚簇索引与非聚簇索引
52. 非聚簇索引一定会回表查询吗?
不一定,如果查询语句的字段全部命中了索引,那么就不必再进行回表查询(哈哈,覆盖索引就是这么回事)。
举个简单的例子,假设我们在学生表的上建立了索引,那么当进行select age from student where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询。
53. 组合索引是什么?为什么需要注意组合索引中的顺序?
组合索引,用户可以在多个列上建立索引,这种索引叫做组合索引。
因为InnoDB引擎中的索引策略的最左原则,所以需要注意组合索引中的顺序。
54. 什么是数据库事务?
数据库事务(简称:事务),是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
55. 隔离级别与锁的关系
回答这个问题,可以先阐述四种隔离级别,再阐述它们的实现原理。隔离级别就是依赖锁和MVCC实现的。
56. 按照锁的粒度分,数据库锁有哪些呢?锁机制与InnoDB锁算法
57. 从锁的类别角度讲,MySQL都有哪些锁呢?
从锁的类别上来讲,有共享锁和排他锁。
锁兼容性如下:
58. MySQL中InnoDB引擎的行锁是怎么实现的?
基于索引来完成行锁的。
select * from t where id = 666 for update;
for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,如果 id 不是索引键那么InnoDB将实行表锁。
59. 什么是死锁?怎么解决?
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。看图形象一点,如下:
死锁有四个必要条件:互斥条件,请求和保持条件,环路等待条件,不剥夺条件。
解决死锁思路,一般就是切断环路,尽量避免并发形成环路。
60. 为什么要使用视图?什么是视图?
为什么要使用视图?
为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。
什么是视图?
视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。
61. 视图有哪些特点?哪些使用场景?
视图特点:
视图用途: 简化sql查询,提高开发效率,兼容老的表结构。
视图的常见使用场景:
62. 视图的优点,缺点,讲一下?63. count(1)、count(*) 与 count(列名) 的区别?64. 什么是游标?
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
65. 什么是存储过程?有哪些优缺点?
存储过程,就是一些编译好了的SQL语句,这些SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后给这些代码块取一个名字,在用到这个功能的时候调用即可。
优点:
缺点:
66. 什么是触发器?触发器的使用场景有哪些?
触发器,指一段代码,当触发某个事件时,自动执行这些代码。
使用场景:
67. MySQL中都有哪些触发器?
MySQL 数据库中有六种触发器:
68. 超键、候选键、主键、外键分别是什么?69. SQL 约束有哪几种呢?70. 谈谈六种关联查询,使用场景。71. varchar(50)中50的涵义72. mysql中int(20)和char(20)以及varchar(20)的区别73. drop、delete与truncate的区别
deletetruncatedrop
类型
DML
DDL
DDL
回滚
可回滚
不可回滚
不可回滚
删除内容
表结构还在,删除表的全部或者一部分数据行
表结构还在,删除表中的所有数据
从数据库中删除表,所有的数据行,索引和权限也会被删除
删除速度
删除速度慢,逐行删除
删除速度快
删除速度最快
74. UNION与UNION ALL的区别?75. SQL的生命周期?76. 一条Sql的执行顺序?
77. 列值为NULL时,查询是否会用到索引?
列值为NULL也是可以走索引的
计划对列进行索引,应尽量避免把它设置为可空,因为这会让 MySQL 难以优化引用了可空列的查询,同时增加了引擎的复杂度
78. 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
优化慢查询:
可以看我这篇文章哈:后端程序员必备:书写高质量SQL的30条建议
79. 主键使用自增ID还是UUID,为什么?
如果是单机的话,选择自增ID;如果是分布式系统,优先考虑UUID吧,但还是最好自己公司有一套分布式唯一ID生产方案吧。
80. mysql自增主键用完了怎么办?
自增主键一般用int类型,一般达不到最大值,可以考虑提前分库分表的。
81. 字段为什么要求定义为not null?
null值会占用更多的字节,并且null有很多坑的。
82. 如果要存储用户的密码散列,应该使用什么字段进行存储?
密码散列,盐,用户身份证号等固定长度的字符串,应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。
83. Mysql驱动程序是什么?
这个jar包:mysql-connector-java-5.1.18.jar
Mysql驱动程序主要帮助编程语言与 MySQL服务端进行通信,如连接、传输数据、关闭等。
84. 如何优化长难的查询语句?有实战过吗?85. 优化特定类型的查询语句
平时积累吧:
86. MySQL数据库cpu飙升的话,要怎么处理呢?
排查过程:
处理:
其他情况:
也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等
87. 读写分离常见方案?88. MySQL的复制原理以及流程
主从复制原理,简言之,就三步曲,如下:
如下图所示:
上图主从复制分了五个步骤进行:
步骤一:主库的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库。
步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从ExecMasterLog_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
89. MySQL中DATETIME和TIMESTAMP的区别
存储精度都为秒
区别:
90. Innodb的事务实现原理?91. 谈谈MySQL的Explain
Explain 执行计划包含字段信息如下:分别是 id、selecttype、table、partitions、type、possiblekeys、key、key_len、ref、rows、filtered、Extra 等12个字段。
我们重点关注的是type,它的属性排序如下:
system > const > eq_ref > ref > ref_or_null >
index_merge > unique_subquery > index_subquery >
range > index > ALL
92. Innodb的事务与日志的实现方式有多少种日志
innodb两种日志redo和undo。
日志的存放形式事务是如何通过日志来实现的93. MySQL中TEXT数据类型的最大长度94. 500台db,在最快时间之内重启。95. 你是如何监控你们的数据库的?你们的慢日志都是怎么查询的?
监控的工具有很多,例如zabbix,lepus,我这里用的是lepus
96. 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做?
主从一致性校验有多种工具 例如checksum、mysqldiff、pt-table-checksum等
97. 你们数据库是否支持emoji表情存储,如果不支持,如何操作?
更换字符集utf8-->utf8mb4
98. MySQL如何获取当前日期?
SELECT CURRENT_DATE();
99. 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
1、如果A表TID是自增长,并且是连续的,B表的ID为索引select * from a,b where a.tid = b.id and a.tid>500000 limit 200;
2、如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;
100. Mysql一条SQL加锁分析
一条SQL加锁,可以分9种情况进行哈:
有道无术,术可成;有术无道,止于术