mysql部分

1、聚簇索引与非聚簇索引 非聚簇索引怎么查的(回表)

lnnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;
  一般建表会用一个自增主键做聚簇索引,如果没有定义主键, innodb会选择非空的唯一索引代替。如果没有这样的索引, innodb会隐式的定义一个主键来作为聚簇索引,这个字段长度为6个字节,类型为长整形。但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。
  我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了需找主键索引的二级索引,现在找到主键索引再通过主键索引找数据;
非聚簇索引:又称辅助索引或者二级索引,像复合索引、前缀索引、唯一索引
Innodb使用的是聚簇索引,MyISam使用的是非聚簇索引
聚簇索引的优缺点
优点:
1.数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快

聚簇索引和非聚簇索引的区别
聚簇索引的叶子节点存放的是主键值和数据行,支持覆盖索引;二级索引的叶子节点存放的是主键值或指向数据行的指针。
由于节子节点(数据页)只能按照一颗B+树排序,故一张表只能有一个聚簇索引。辅助索引的存在不影响聚簇索引中数据的组织,所以一张表可以有多个辅助索引
注:覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。

2、Myisam和innodb的区别?

  InnoDB支持事物,而MyISAM不支持事物
  InnoDB支持行级锁,而MyISAM支持表级锁
  InnoDB支持MVCC,而MyISAM不支持
  InnoDB支持外键,而MyISAM不支持
     InnoDB不支持全文索引,而MyISAM支持。
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。

3、大库 DDL 怎么做比较好

4、sql索引失效原因

5、B 树 和 B+ 树的区别,为什么 mysql 要用 B+ 树,B+树细节优势,和哈希索引的区别,是为了解决什么问题?

6、插入10条,删除8,9,10,插入一条,重启mysql id 是多少?主从如何同步?binlog 啥问题……undo/redo 用处

7、mysql现在有一个sql执行比较慢,说一下你知道的所有可能导致慢的原因?

8、where a=int and b=int and c=int order by d,怎么建索引?可以同时使用2个索引吗?

9、innodb存储引擎有什么特性?Innodb和myisam的主键索引有什么区别?

10、怎么搭建主从?

11、我前面说了分库分表,问你是如何分库分表?在这种情况下,多个表的聚合查询要怎么做,有什么思路(不能借助其他组件,就在mysql上实现)?

12、事物隔离了解吗(有4种)?

未提交读,提交读,不可重复读,可重复读,默认是不可重复读,

13、如果你遇到一个sql查询很慢,你会怎么去做?回答看解释器,再分析慢再那里。然后优化sql(比如不要使用联合查询),分库分表。建立索引等等

14、联合索引你能介绍一下吗,还有它们的执行顺序?

15、datetime和timestamp有什么区别?timestamp有什么限制?什么时候到期?怎么解决?

16、sql查询性能瓶颈处理方式

17、sql索引优化方式,explain字段,有哪些索引,底层是怎么实现的

18、如何拿到多个goroutine的返回值,如何区别他们

19、go如何避免panic

20、哪些键可以设置唯一索引

21、单表500W的数据量,写一条sql连表查前10条用户信息。怎么优化,怎么加索引?

22、主键索引是什么?为什么要加主键索引?

23、事务有哪些级别?

24、B树和B+树有什么区别?如果数据量再大一点,达到千万级别。估计加一条索引需要20分钟,你要怎么处理让他快速加上去?如果分表怎么分?

B树:Degree=3,意味着每个节点只能放2个数据,度不一样,所放的节点数据就不一样

B+树:叶子节点存储数据,非叶子节点不存储数据

25、mysql数据库的锁机制?

26、mysql 事务 mysql事务的隔离级别有几种,分别阐述 在串行化隔离级别中,怎么加读锁和写锁,这里的锁是什么锁:表锁?行锁?还是其他锁?

27、mysql的索引 假设联合索引为<a,b,c> select * from table_name where c> 10 and a = 10 and b < 10 limit 2000,10 该语句有什么问题,如何优化

28、什么是mysql binlog

MySQL的 binlog 是记录所有数据库表结构变更(例如 CREATE、ALTER TABLE)以及表数据修改(INSERT、UPDATE、DELETE)的二进制日志。binlog 不会记录 SELECT 和 SHOW 这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看 MySQL 执行过的所有语句。
MySQL binlog 以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。
binlog 有三种格式,各有优缺点:
  1、statement: 基于 SQL 语句的模式,某些语句和函数如 UUID, LOAD DATA INFILE 等在复制过程可能导致数据不一致甚至出错。
  2、row: 基于行的模式,记录的是行的变化,很安全。但是 binlog 会比其他两种模式大很多,在一些大表中清除大量数据时在 binlog 中会生成很多条语句,可能导致从库延迟变大。
  3、mixed: 混合模式,根据语句来选用是 statement 还是 row 模式。

posted @ 2022-09-04 15:24  南昌拌粉的成长  阅读(33)  评论(0编辑  收藏  举报