MySQL部分内容整理

1.索引是什么?
索引是一种数据结构,类似书的目录,能帮助快速找到数据。

2.索引是个什么样的数据结构?
INNODB引擎下,索引的数据结构是B+Tree和Hash索引

3.Hash索引和B+Tree有所区别和劣势?
1.hash索引只适用于等值查询,不支持范围查询
2.hash索引有可能出现多个key重复,这种情况查询效率低
3.hash索引不支持排序
4.hash索引不支持模糊查询
5.hash索引任何时候都需要回表。

4,什么是聚簇索引和覆盖索引?
聚簇索引:在innodb引擎中,就明显的聚簇索引就是主键索引,如果没有主键索引,就采用唯一索引,如果也没有,就使用一个隐式的生成字段
覆盖索引:就是指在查询中,在叶子节点的key中,就包含了所要查询的数据,不需要进行回表的操作

5,建立索引时要考虑那些因素?
1.需要考虑索引的先后顺序
2.考虑字段的使用频率,当数据比较平均的时候,索引的效果比较差
3.单表的索引要合适,索引不能过多

6,联合索引是什么?为啥还需要考虑顺序?
联合索引就是由多个字段组合而成的索引
考虑顺序是因为索引的最左原则,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。

7,创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
在查询的sql前面添加explain,得到sql语句的分析,可以通过possible_key ,key,extra来判断

8,哪些情况下会出现索引失效?
1. 使用不等于查询 !=,<>
2. 在字段上进行函数,运算
3. 搜索的内容 ‘%1111‘,算做范围查询
4. 不符合联合索引的最左原则

9,事务是什么?
事务就是一串sql语句,要么全成功,要么全失败。

10,ACID是什么?简要说明一下
事务的4个特征:隔离性,一致性,持久性,原子性

11,同时有多个事务在进行会咋样?
1. 脏读:脏读是在未提交读隔离级别下,当一个事务正在访问数据,并且进行了修改,但该事务的修改还没提交,这时另外一个事务也访问这个数据,然后使用这个数据
2. 不可重复读:(已提交读)在一个事务中,多次读同一数据,在这个事务执行期间,另外一个事务也在对该记录进行修改操作,那么就会导致在第一个事务中, 多次读取到的事务不一致
3. 幻读:是在一个事务中,多次读同一数据,在这个事务执行期间,另外一个事务中添加一条新记录,那么就会导致在第一个事务中,会读取到本不存在的记录行

12,怎么样解决脏读,不可重复读,幻读?MySQL的事务隔离级别
隔离级别:1,未提交读 2,读已提交 3,可重复读, 4,串行化

13,Innodb使用哪种隔离级别?
默认使用的是可重复读级别

14,MySQL锁是什么?
锁产生的背景就是为了解决并发问题,来保证事务的一致性

15,MySQL-binlog有哪几种记录方式?
statement,row,mixed

statement,记录单元为语句.即每一个sql造成的影响会记录.由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制.

row级别下,记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如alter table),因此这种模式的文件保存的信息太多,日志量太大.

mixed. 一种折中的方案,普通操作使用statement记录,当无法使用statement的时候使用row.

16,大表分页处理
原语句
select * from table where age > 20 limit 1000000,10
优化
SELECT * FROM table WHERE id in (SELECT id FROM table WHERE age > 20 limit 1000000,10)

SELECT * FROM table WHERE id > 1000000 LIMIT 10

本作品采用《CC 协议》,转载必须注明作者和本文链接
别问我八十年代的哪首歌
qiuqiumade
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!