
阿里面试题
1. 使用使用mysql索引都有哪些原则?索引什么数据结构?索引都有哪些原则?索引什么数据结构?B+tree 和和 B tree 什么区别?什么区别?
1、 对于查询频率高的字段创建索引;
2、 对排序、分组、联合查询频率高的字段创建索引;
3、 索引的数目不宜太多
原因: a、每创建一个索引都会占用相应的物理控件;
b、过多的索引会导致insert、update、delete语句的执行效率降低;
4、若在实际中,需要将多个列设置索引时,可以采用多列索引
如:某个表(假设表名为Student),存在多个字段(StudentNo, StudentName, Sex, Address,
Phone,BirthDate),其中需要对StudentNo,StudentName字段进行查询,对Sex字段进行分组,对BirthDate 字段进
行排序,此时可以创建多列索引index index_name (StudentNo, StudentName, Sex, BirthDate);#index_name为索
引名
在上面的语句中只创建了一个索引,但是对4个字段都赋予了索引的功能。
创建多列索引,需要遵循BTree类型,即第一列使用时,才启用索引。
在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。
如: select * from Student where StudentNo = 1000; #使用到了StudentNo字段,索引被启用。
以使用explain检测索引是否被启用如:explain select * from Student where StudentNo = 1000;
5、选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯 一性的字
段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存 在同名现象,
从而降低查询速度。
6、尽量使用数据量少的索引
如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索
需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。
7、尽量使用前缀来索引
如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检 索会很浪费时
间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
8、删除不再使用或者很少使用的索引.
表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理 员应当定期
找出这些索引,将它们删除,从而减少索引对更新操作的影响B+ tree树索引, B tree,散列
2. Mysql有哪些存储引擎?请详细列举其区别?有哪些存储引擎?请详细列举其区别?
InnoDB: 事务型存储引擎, 并且有较高的并发读取频率
MEMORY: 存储引擎,存放在内存中,数据量小, 速度快
Merge:
ARCHIVE: 归档, 有很好的压缩机制
3. 设计高并发系统数据库层面该如何设计?设计高并发系统数据库层面该如何设计? 数据库锁有哪些类型?如何实现?数据库锁有哪些类型?如何实现?
1. 分库分表: 同样量的数据平均存储在不同数据库相同表(或不同表)中,减轻单表压力,如果还是很大,就可
以每个库在分多张表,根据hash取值或者其他逻辑判断将数据存储在哪张表中
2. 读写分离: 数据库原本就有主从数据库之分,查询在从服务器,增删改在主服务器,
3. 归档和操作表区分: 建一张归档表,将历史数据放入,需要操作的表数据单独存储
4. 索引啊之类的创建,对于数据量很大,百万级别以上的单表,如果增删改操作不频繁的话, 可以创建bitMap索
引,速度要快得多
1. 共享锁:要等第一个人操作完,释放锁,才能操作