面试题-mysql1

19 篇文章 0 订阅
3 篇文章 0 订阅
1、索引是什么
  • 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。
  • 关系型数据库的索引一般为硬盘级索引。
2、B+树
2.1、二叉查找树
  • 第一个元素为根节点,后面元素比他大的放右边,小的放左边。
  • 若后续插入的元素都比根节点大,则会变成一个线性链表的数据结构,与无索引相同。
2.2、平衡二叉查找树
  • 节点左右叶子节点层级差不超过1。
  • 频繁变更的列最好不要建立索引,左旋右旋会造成性能消耗。
  • 缺陷:搜寻效率不足:树的层数决定了搜寻IO的次数;数据节点内容太少:一次交互为一个4k的页,每次页保存的关键字数据量太小了。所以不适合作为索引。
2.3、B树(balanced tree)
  • 被称为多路平衡查找树,是一棵绝对平衡树,所有的叶子节点在一层。
  • 路的数量 = 关键字的数量 + 1;通过关键字切分数据块。
2.4、B+树(balanced tree)
  • 非叶子节点不存数据,叶子节点存储整条数据;
  • 非叶子节点向下做左闭区间,右开区间,存在关键字+1个子节点。
3、索引的原则
  • 离散型越高选择性越好,即重复度越低;离散度很低,会造成直接进行全表扫描,索引无用;
  • 最左匹配原则:对索引中关键字进行对比,一定是从左向右,切不可跳过;
  • 联合索引(组合索引):选择原则:常用的列优先、离散度高的优先、宽度小的列优先;
4、聚簇索引
  • 聚簇索引的数据物理存放顺序和索引顺序是一致的,只要索引是相邻的,对应的数据一定也是相邻地存放到磁盘上的;
  • 适用于自增的主键表结构;
  • 可以在检索和数据读取上提高很大的效率
5、SQL层面优化查询效率
  • 在频繁使用group by 和 order by 的列上建立索引;
  • 在经常进行链接的列上建立索引;
  • 使用truncate代替delete,减少日志带来的资源消耗;
5.1、mysql索引失效的情况
  • 在where子句中对字段进行null值的判断,将会导致索引失效而进行全表扫描;

  • 避免在where中使用!=和<>;

  • 避免使用or可以使用union(union去重,union all允许重复);

  • 模糊查询like左侧为模糊,也会导致全表扫描;

  • in和not in会导致全表扫描,使用exists和not exists;

  • 避免在where中使用内置函数;

  • 避免在where中对字段进行表达式操作,加减乘除等;

  • 索引会提高select效率,但是会降低insert和update效率;

  • 尽量使用数字型字段,字符型字段会在处理过程中左侧逐个字符比较;

  • 尽可能使用varchar代替char,char定长;

  • 用具体的字段代替select * ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值