具有MySQL索引优化、查询优化和存储优化经验;
具有缓存使用经验,熟悉Redis各种数据结构的使用场景;
有分布式、集群、高并发、高负载、高可用系统
使用MySQL
如何设计web数据库?
使用关系数据库代替普通文件有哪些优点?
关系数据库专门的内置机制是怎么处理并发访问的?
什么是关系数据库?
web数据库的设计和架构是什么?
什么是建模?要考虑什么?
如何避免空间的浪费?
如何确定所获取的数据是最新的?什么是修改不规则?什么是删除不规则?
什么是原子列值?
数据库里面的空值会占用空间么?如何避免浪费空间?
用户在浏览器上查看信息的一个流程?主要历经了哪几个?
如何提高数据库性能?
登录MySQL的指令是什么?远程如何登录?
什么是MySQL权限系统?
最少权限原则是啥?
MySQL提供多个表类型和存储引擎,其中包括一些食物安全的类型这些都是什么??myisam是什么?为什么要用这种存储引擎?什么是存储引擎?
什么是索引?怎样创建索引?
char和varchar的区别?
text和blob的区别?
set和enum的区别?
有哪些常见的数据库系统?他们之间有什么区别?
笛卡尔积是什么?
左关联是干嘛的?
MySQL中的关联类型?
如何分组和合计数据?
如何进行子查询?有没有同等作用的查询sql?哪个效率更高?
子查询的操作符有哪些?
用alter如何对表进行修改?
MySQL
CRUD
JOIN、LEFT JOIN 、RIGHT JOIN、INNER JOIN
UNION
GROUP BY + COUNT + WHERE 组合案例
常用 MySQL 函数,如:now()、md5()、concat()、uuid()等
1:1、1:n、n:n 各自适用场景
了解触发器是什么,说个使用场景
数据库优化手段
索引、联合索引(命中条件)
分库分表(水平分表、垂直分表)
分区
会使用 explain 分析 SQL 性能问题,了解各参数含义
重点理解 type、rows、key
Slow Log(有什么用,什么时候需要)
MSSQL(了解)
- 查询最新5条数据
NOSQL
- Redis、Memcached、MongoDB
- 对比、适用场景(可从以下维度进行对比)
- 持久化
- 支持多钟数据类型
- 可利用 CPU 多核心
- 内存淘汰机制
- 集群 Cluster
- 支持 SQL
- 性能对比
- 支持事务
- 应用场景
- 你之前为了解决什么问题使用的什么,为什么选它?
mysql架构
什么是嵌入式应用?什么是数据仓库?什么是内容索引?什么是分发软件?什么是高可用的冗余系统?什么是联机事务处理系统(OLTP)?
MySQL的存储引擎架构是什么?为什么它可以将查询处理和各类服务器任务与数据的存储/提取相分离?
这种分离特性有啥用?怎么满足的?
服务器是怎样缓存线程的??
安全套接层方式(SSL)是什么方式的连接?
服务器如何验证该客户端是否有权限执行某个具体查询?
什么是优化器?
服务器如何“询问”查询缓存?
缓存是存放在哪里的?
并发控制问题是怎么产生的?
MySQL如何处理并发读取程序?
MySQL如何处理并发写入程序?
什么是读锁?什么是写锁?
什么是事务?
如何回滚事务?
什么是ACID测试?如何确保ACID特性的实现?
什么是幻读问题?什么是脏读?如何解决?
什么是锁竞争?
什么是对最易回滚事务的最大估算?
什么是预写式日志?
事务日志是什么?记录在哪里?为什么速度很快?
什么是活动事务?
非事务型有哪些?特点是什么?
什么叫显式的开始一个事务?
啥是数据定义语言(DDL)命令?
什么是alter table命令?
lock tables是干嘛的?
MySQL中如何设置隔离级?
ANSI标准隔离级是什么?
怎样在事务中混合使用存储引擎?
如果混合使用事务性表和非事务性表(如InnoDB和MyISAM表),假如事务处理一切顺利,结果也会正常,但是如果事务要回滚,那么在非事务性表上做的修改将无法取消,这将导致数据库处于数据不一致的状态,在这种状态下,很难讲数据进行恢复,并且事务会变得很悬。所以为每个表选择正确的存储引擎很重要!那么如何为每个表选择正确的存储引擎呢?
如果在一个非事务性表上进行事务性操作,MySQL通常不会给出警告或者报错信息,有时回滚任务会产生一个警告信息“some nontransactional changed tables couldn’t be rolled back”,但是大多数情况下,操作一个非事务性表不会得到任何提示。
如何自动提交事务?
什么是隐式锁定?
什么是显式锁定?
一个应用从myisam引擎转换到innoDB引擎后,仍然在使用lock tables命令,而这实际是没必要的,因为innoDB已经可以实现行级加锁,为什么这种命令还会引起服务器的性能问题?
LOCKTABLES命令与事务处理之间的交互作用,是比较复杂的,在某些服务器版本上可能会导致产生一些不可预料的行为。因此建议,除非是在一个事务中使用lock tables,同事autocommit模式是被禁止的,否则,无论是赢何种存储引擎,都不要使用lock tables。
多版本并发控制,是怎样和行加锁机制关联使用的?
如何改变myisam表上的指针大小?(调高或者调低)
sql语句中类型ser_agent varchar(255) not null,
为什么是255 ?代表啥意思?
为什么有些语言能对性能分析有内嵌的支持功能?怎么做到的?
示例
假设,对于来自中心电话交换机的所有电话呼叫,都要使用MySQL进行实时数据记录(Logging),或者,Apache中已经安装了mod_log_sql模块,可以将web站点的所有访问信息直接记录到表中,那么在这类应用中,速度可能是最重要的设计指标,没人希望数据库因此陷入瓶颈状态,MYISAM引擎和Archive引擎非常适合这类应用,因为他们消耗的系统开销很小,并且支持每秒钟高达数千条记录的插入,另外,PBXT存储引擎可能也很适合这种数据记录应用。
事情看起来可能很简单,不过,如果还要运行报告程序,对记录的数据进行汇总,那么基于这种查询,报告程序可能需要提取大量数据,而这将严重减缓数据记录的插入处理。如果出现这种情况,那该怎么办?
一种解决办法是使用MySQL内置的复制特性,将相关数据克隆岛第二台服务器(从服务器)上,再从服务器上运行那些对时间或CPU要求苛刻的程序,这可以将主服务器腾出手来,继续完成数据插入,同时,从服务器上运行任何查询,都不必担心影响实时的数据记录。
当然,也可以选择在系统低负载阶段,运行相关查询,不过随着应用规模的不断增长,这种策略是不可靠的,无法确保应用稳定运行。
另一个选择是使用合并表。调整应用,不是将所有的数据记录在同一张表里,而是将数据记录在不同表中,表名可以按照年份,原表名和月份区分,例如Web_logs_2008_01然后定义一个合并表,用于相关查询,合并表中包含了需汇总的所有数据。如果要按日或按周进行汇总,策略也是相同的,只需创建含有特定名称的表即可。在这种设计里,汇总程序可以在那些不再需要进行写操作的表上,运行相关汇总查询,而对于当前表中,可以继续不中断的实时记录数据。