1,什么是表分区?
表分区是根据一定规则,将一张数据表分解成多个更小的,容易管理的部分,从逻辑上只有一张表,但物理层面上由多个分区组成
2,表分区与分表区别?
分表:通过一定规则,将一张表分成多张不同的表
区别在于:分区逻辑上只有一张表,而分表是一张表分成多张表
3,表分区有什么好处?
(1)储存更多数据,分区表可以分布在不同物理设备上,从而高效的利用多个物理设备
(2)优化查询,在where语句中包含分区条件时,可以只扫描一个或者多个分区表来提高查询效率。用sum和count语句时,也可以在多个分区上并行处理,最后汇总结果
(3)分区表更容易维护,像批量删除大量数据可以清除整个分区
(4)避免某些特殊瓶颈,如innodb的单个索引互斥访问
4,简单介绍下MVCC
MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库引擎中常见处理读写冲突的手段,以解决并发场景下的读写冲突。主要依托undolog
5,介绍一下并发事务存在哪些问题?
(1)更新丢失:多个事务选择了同一行更新,最后的更新覆盖了之前的更新
(2)脏读:一个事务正在对一条数据正在修改还未提交,这时第二个事务来读同一条数据,读到了未提交的脏数据
(3)不可重复读:一个事务在读取某些数据时已经发生了改变,或者某些记录已经被删除了
(4)幻读:一个事务按照相同的条件查询以前读取过的数据,却发现其他事务插入了满足其查询条件的新数据
6,在MVCC中,读操作可以分为哪几类?
(1)快照读,读取的是记录的可见版本(可能是历史版本),不用加锁
(2)当前读:读取的是记录的当前版本,并且当前读返回的记录都会加锁,保证其他并发事务不会再修改这条记录。
7,MVCC的好处是什么?
读不加锁,读写不冲突,在读多写少的应用中,可以大大地增加了并发性能
8,行级锁的优缺点是什么?
优点:(1)当许多线程中访问不同行时只存在少量锁冲突
(2)回滚时只有少量更改(3)可以长时间锁定单一行
缺点:(1)比页锁和表锁占用更多内存(2)在表的大多数使用中,速度更慢,因为你必须获得更多锁(3)若你经常使用GROUP BY或者必须扫描整表,比其他锁慢很多
9,如何做Mysql优化?
(1)开启查询缓存,优化查询
(2)explain你的select语句,可以分析查询性能瓶颈在哪
(3)当只要一行数据时设定limit 1,MySQL会在找到一条数据时停止搜索,而不是继续往后查询下一条符合条件的记录
(4)为搜索字段建立索引
(5)使用enum而不是varchar(只有一个字段,如 性别,国家,民族等字段)
(6)preparedStatement,可以提高速度并且防止SQL注入攻击
(7)垂直分表
(8)选择合适查询引擎
10,主从复制过程是什么?
(1)主机上的binlog线程,记录下了所有改变数据库的语句,放入主机的binlog中
(2)从机的io线程在执行start slave后,负责在master上拉取binlog内容,放入自己的relay log中
(3)从机SQL执行线程执行relaylog内的语句
11,解释下外连接,自连接,和内连接的区别
交叉连接:又名笛卡尔积,不使用任何条件,直接将一个表中所有内容和另一个表的记录一一匹配
内连接:只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的不会出现在结果集中,只连接匹配的行
外连接:其结果不仅包含符合条件的行,还会包含左表(左外连接),右表(右外连接)或两个表(全外连接,MYSQL目前不支持)的所有数据行
12,MySQL如何优化DISTINCT?
distinct在所有列上转化为GROUP BY,并与ORDER BY子句结合使用。