title: 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了)
tags: 面试常见题
腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了)
腾讯面试题:创建索引的时候,你一般会考虑些哪些因素?(按照下面的点去答,你就稳了,哈哈😁。)
① 适合建立索引的列是出现在where 子句中的列,或者连接子句中指定的列;
② 基数较小的类,索引效果较差,没有必要在此列建立索引;
③ 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间;
④ 不要过度的索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只需要保持所需要的索引即可,不应过度索引,这样更利于查询。
⑤ 避免where 子句对字段施加函数,否则不会命中索引;
⑥ 在使用InnoDB 时使用与业务无关的自增主键作为主键,即使用逻辑主键而不要使用业务主键;
⑦ 将打算加索引的列设置为Not null,否则将导致引擎放弃使用索引而进入全表扫描;
⑧ 删除长期未使用的索引,不用的索引的存在会造成不必要的性能损耗。
其实回答面试官,用上面的的几点即可。下面为拓展知识:
分两种情况来说:
1)哪些情况需要建立索引:
① 主键自动建立唯一索引;
② 频繁作为查询条件的字段应该建立索引
③查询中与其他表关联的字段,外键关系建立索引;
④ 单键/组合索引的选择问题,组合索引的性价比更高些;
⑤ 在经常需要排序的列创建索引,因为索引已排序,这样查询可以利用索引的排序,加快排序查询时间;
2)哪些情况不需要建立索引
① 表记录太少;
② 经常增删查改的表或字段;因为虽然索引提高查询的速度,同时却降低更新表的速度,因为更新表时,MySQL不仅需要保存数据,还要保存一下索引文件,所以会带来很大的性能开销。
③ where 条件里用不到的字段就不创建索引;
④ 过滤性不好的就不要创建索引了,比如说,性别。