← 返回目录

计算机基础面经29

第 44 / 152 卷日期:

计算机基础面经29

@author 壮

数据库:

索引:

  1. 索引与主键的区别
  2. 索引的优缺点
  3. 使用索引的原因
  4. 聚簇索引和非聚簇索引的区别
  5. 索引什么时候是否会失效,最左匹配原则是什么?
  6. 索引的类型
  7. 建立索引的场景

计算机网络:

  1. HTTP常见的状态码
  2. HTTP如何禁用缓存?如何确认缓存?

数据库

索引

1、索引与主键的区别

  1. 主键是为了标识数据库记录唯一性,不允许记录᯿复,且键值不能为空,主键也是一个特殊索引
  2. 数据表中只允许有一个主键,但是可以有多个索引
  3. 使用主键的数据库会自动创建主索引,也可以在非主键上创建索引,方便查询效率
  4. 索引可以提高查询速度,它就相当于字典的目录,可以通过它很快查询到想要的结果,而不需要进行全表扫描
  5. 主键索引外索引的值可以为空. 主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯一索引
  6. 唯一索引则表示该索引值唯一,可以由一个或几个字段组成,一个表可以有多个唯一索引

2、索引的优点与缺点

优点:

  1. 创建唯一性索引,保证数据库表中每一行数据的唯一性
  2. 大大加快数据的检索速度,这也是创建索引的最主要的原因
  3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
  5. 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

缺点:

  1. 创建索引和维护索引要耗费时间,这种时间随着数据ᰁ的增加而增加
  2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索

引,那么需要的空间就会更大

  1. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

3、使用索引的原因[优点]

  1. 将随机IO变为顺序IO
  2. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义

4、聚簇索引和非聚簇索引的区别?

聚簇索引:

  1. 以主键创建的索引
  2. 在叶子节点存储的是表中的数据
  3. 不是一种索引类型,而是一种存储数据的方式.Innodb的聚簇索引是在同一个数据结构中保存了索引和数据
  4. 聚簇索引记录的排序顺序和索引的排序顺序一致,所以查询效率快

【因为只要找到第一个索引值记录,其余的连续性的记录在物理表中也会连续存放,一起就可以查询到】

缺点:

新增比较慢

【因为为了保证表中记录的物理顺序和索引顺序一致,在记录插入的时候,会对数据页᯿新排序】

非聚簇索引:

  1. 以非主键创建的索引(二级索引)
  2. 在叶子节点存储的是主键和索引列
  3. 索引的逻辑顺序与磁盘上行的物理存储顺序不同,非聚集索引在叶子节点存储的是主键和索引列

【当我们使用非聚集索引查询数据时,需要拿到叶子上的主键再去表中查到想要查找的数据。这个过程就是我们所说的回表】

5、索引什么时候是否会失效,最左匹配原则是什么?

最左匹配原则:

最左优先,以最左边的为起点任何连续的索引都能匹配上,如不连续,则匹配不上;

索引失效在以下情况:

  1. 不满足最左【前缀】匹配规则
  2. 在索引列上做任何操作如计算、函数、(手动或自动)类型转换等操作,会导致索引失效而进行全表扫描
  3. 使用不等于(!=、<>)
  4. like 中以通配符开头(’%abc’)
  5. 字符串不加单引号索引失效
  6. or 连接索引失效

6、索引的类型

(1)从存储来看

全文索引:

目前只有MyISAM引擎支持。其可以在CREATE TABLE,ALTER TABLE,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR,TEXT 列上可以创建全文索引。

围查询、排序及组合索引仍然效率不高。

B树索引:

BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口 root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。

R树索引:

RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、 NDb、Archive几种。相对于BTREE,RTREE的优势在于范围查找。

(2)应用层次来看

普通索引:

即一个索引只包含单个列,一个表可以有多个单列索引。

唯一索引:

索引列的值必须唯一,但允许有空值。

复合索引【联合索引】:

一个索引包含多个列。所有的索引列只可以进行最左前缀匹配【通过查询来反推索引,以使某个固定的查询可以尽可能的命中索引以提高查询速度】

从表记录的排列顺序和索引的排列顺序是否一致来划分:

聚集索引:表记录的排列顺序和索引的排列顺序一致。

非聚集索引:表记录的排列顺序和索引的排列顺序不一致。

(3)其他

前缀索引:

在对一个比较长的字符串进行索引时,可以仅索引开始的一部分字符,这样可以大大的节约索引空间,从而提高索引效率.但是这样也会降低索引的选择性

覆盖索引:

当一个索引包含(或者说是覆盖)需要查询的所有字段的值时【在InnoDB存储引擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主

键再查找一次,这样就会比较慢。覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!】

7、建立索引的场景

在最频繁使用的、用以缩小查询范围的字段,需要排序的字段上建立索引。

不宜:

  1. 对于查询中很少涉及的列或者᯿复值比较多的列
  2. 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等
全站分卷索引 · 152 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(面经篇)
  2. 2后端面经02-美团
  3. 3Java面经02-阿里ICBU
  4. 4Java面经-04-CVET
  5. 5Java面经-06-字节后端
  6. 6Java面经08-用友
  7. 7Java面经09-快手
  8. 83. 计算机网络
  9. 94. 数据库
  10. 105. 算法
  11. 11Java面经11-美团
  12. 121.3 java的4种引用
  13. 132. JVM
  14. 143. 操作系统
  15. 154. 计算机网络
  16. 165. 数据库
  17. 17Java面经13
  18. 18Java面经14
  19. 19Java面经16
  20. 20Java面经17
  21. 21Java面经18
  22. 22二面
  23. 23三面
  24. 24面经19-Java-字节暑期实习
  25. 25字节三面
  26. 26面经21-Java-蚂蚁暑期实习
  27. 27蚂蚁三面
  28. 28MySQL
  29. 29计算机网络
  30. 30拉链法的工作原理
  31. 31确定桶下标
  32. 32扩容 - 基本原理
  33. 33链表转红黑树
  34. 34子进程和线程的区别
  35. 35协程
  36. 36数据库
  37. 37哈希索引
  38. 38计算机网络
  39. 39TCP和UDP的区别
  40. 40面经25-Java-百度二面
  41. 41面经26-Java-京东一面
  42. 42面经27-Spring
  43. 43计算机基础面经28
  44. 44计算机基础面经29
  45. 45计算机网络
  46. 46操作系统
  47. 47任务调度算法
  48. 48数据库
  49. 49计算机基础面经31
  50. 50乐观锁两种实现机制
  51. 51版本号机制
  52. 52死锁相关问题
  53. 53计算机网络
  54. 54拥塞控制的四种方法
  55. 55计算机基础面经32
  56. 56三次握手的流程
  57. 57计算机基础面经33
  58. 58计算机基础面经34
  59. 59异步
  60. 60C++后端
  61. 61面经3-C++-地平线
  62. 62面经6-C++-国电南瑞
  63. 63面经7-c++后端-字节
  64. 64二面
  65. 65面经11-C++-OPPO
  66. 66面经12-C++-商汤
  67. 67SelectDB
  68. 68面经15-C++-中望
  69. 69面经16-C++-米哈游
  70. 70面经17-C++-旷世
  71. 71面经19-C++-蔚来
  72. 72面经20-C++-第四范式
  73. 73面经21-C++-TP-Link
  74. 74面经23-C++-猿辅导
  75. 75面经25-C++-文远知行
  76. 76面经26-C++-百度
  77. 77百度二面
  78. 78百度三面
  79. 79面经27-C++-ZEKU
  80. 80ZEKU哲库HR面
  81. 81面经28-C++-VIVO
  82. 82面经29-C++-TPLINK
  83. 83字节二面
  84. 84HR面
  85. 85面经32-C++
  86. 86TCP的粘包与拆包
  87. 87引入协程的原因
  88. 88面经34-C++
  89. 892. 指针与引用的区别
  90. 902. Nagle 算法与延迟确认
  91. 91数据库
  92. 922. MVCC-多版本并发控制
  93. 93计算机网络
  94. 94面经36
  95. 95面经37
  96. 96面经38
  97. 97面经39-C++-拼多多+字节
  98. 98字节一面【7.27】
  99. 99shopee测开一面【7.29】
  100. 100一、表面上开销
  101. 101面经44-京东二面
  102. 102Go后端
  103. 103二面
  104. 104面经3-Go-字节日常实习
  105. 105字节二面
  106. 106字节三面
  107. 107HR面
  108. 108面经5-Go-字节暑期实习
  109. 109字节二面
  110. 110字节三面
  111. 111面经02-测开-百度提前批
  112. 112二面
  113. 113面经06-测试-海尔智家
  114. 114面经07-测开-蔚来
  115. 115面经09-测试-中望
  116. 116面经10-测开-ZEKU
  117. 117面经12-测试-科大讯飞
  118. 118面经15-测开-美团暑期实习
  119. 119面经16-测开-外企社招
  120. 120Nvidia四面
  121. 121面经2-前端-百度日常实习
  122. 122面经3-前端-得物面经
  123. 123面经4-前端-腾讯健康
  124. 124面经5-前端-字节面经
  125. 125面经6-前端-携程前端
  126. 126面经7-前端-顺丰
  127. 127面经9-前端-比特大陆日常实习
  128. 128面经10-前端-抖音
  129. 129面经11-前端-蔚来/百度/oppo
  130. 130百度提前批
  131. 131面经12-前端-知乎暑期实习
  132. 132知乎二面
  133. 133百度二面
  134. 134面经2-Android客户端-大疆
  135. 135二面
  136. 136面经3-客户端-字节暑期实习
  137. 137字节二面
  138. 138字节二面(深入项目,1h)
  139. 139面经5-客户端-字节
  140. 140面经6-客户端-字节
  141. 141算法
  142. 142面经3-NLP-科大讯法
  143. 143面经4-NLP-科大讯法
  144. 144面经7-游戏算法-莉莉丝
  145. 145面经10-算法
  146. 146面经11-算法-百度pnc暑期实习
  147. 147百度二面
  148. 148抖音一面
  149. 149嵌入式
  150. 150面经3-嵌入式-芯动科技
  151. 151面经4-嵌入式-韶音科技
  152. 152面经6-嵌入式-新华三