面试:数据库索引常见问法

这篇具有很好参考价值的文章主要介绍了面试:数据库索引常见问法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 索引有哪些类型


        普通索引:最基本的索引,没有任何约束限制。
        唯一索引:和普通索引类似,但是具有唯一性约束,可以有 null
        主键索引:特殊的唯一索引,不允许有 null,一张表最多一个主键索引
        组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并
        全文索引:对文本的内容进行分词、搜索
        覆盖索引:查询列要被所建的索引覆盖,不必读取数据行

  • 为什么要使用索引?它们对数据库性能有何影响?


  1. 加快数据检索速度:通过创建适当的索引,数据库可以更快地定位和访问所需的数据行,减少了全表扫描或索引范围扫描的需求,从而加快了数据检索速度。

  2. 减少磁盘IO操作:索引可以帮助数据库系统减少磁盘IO操作的次数。相比于全表扫描,使用索引可以只检索和加载部分数据页到内存中,减少了磁盘IO的开销。

  3. 优化查询性能:索引可以使查询语句更快速地执行,减少了查询的响应时间。通过使用索引,数据库可以快速定位到满足查询条件的数据行,避免了进行全表扫描的开销。

  4. 改善排序和聚合操作:索引可以显著提升排序和聚合操作的性能。例如,在执行ORDER BY子句时,如果有合适的索引可用,数据库可以直接利用索引中的排序顺序,而无需额外的排序操作。

  5. 对多表连接操作的优化:在涉及多个表的连接操作中,使用索引可以加速连接过程,减少连接的时间复杂度。

  • 创建索引有哪些注意点


  1. 索引应该建在查询应用频繁的字段,比如where 判断、 order 排序和 join 的(on)字段上创建索引。
  2. 索引的个数应该适量,索引需要占用空间,更新时候也需要维护。
  3. 区分度低的字段,例如性别,不要建索引。
  4. 频繁更新的值,不要作为索引,维护索引文件需要成本;还会导致页分裂,IO次数增多。
  5. 联合索引把散列性高(区分度高)的值放在前面为了更好的满足最左前缀匹配原则。
  6. 尽可能用联合索引代替多个单列索引(对于单列索引,MySQL基本只能使用一个索引,所以经常使用多个条件查询时更适合使用联合索引)。
  7. 过长的字段,使用前缀索引。当字段值比较长的时候,建立索引会消耗很多的空间,搜索起来也会很慢。我们可以通过截取字段的前面一部分内容建立索引,这个就叫前缀索引。
  8. 不建议用无序的值(例如身份证、UUID )作为索引,在插入时会造成叶子节点频繁分裂,出现磁盘存储的碎片化。
  • 如何选择合适的列来创建索引?


  1. 查询频率:选择经常被查询的列作为索引列。针对经常出现在WHERE子句或JOIN操作中的列进行索引可以显著提高查询性能。

  2. 列的选择性:选择具有高选择性的列作为索引列。选择性是指索引列中不同值的唯一性程度。如果列具有高选择性,即不同值较多,那么使用索引将更加有效。例如,一个性别列只有两个可能的值(男、女),则对该列创建索引的效果会比较有限。

  3. 列的大小和类型:通常情况下,较小的列更适合创建索引,因为它们占用较少的存储空间,并且在内存中加载更快。而过大的文本类型或二进制类型的列则不太适合创建索引。

  4. 数据的更新频率:如果某个列的数据频繁更新,那么对该列创建索引可能会导致索引维护的开销增加。因此,在选择索引列时,需要权衡查询性能的提升与更新开销之间的平衡。

  • 索引哪些情况下会失效呢


        1.查询条件包含or,可能导致索引失效

        2.如果字段类型是字符串,where时一定用引号括起来,否则会因为隐式类型转换,索引失效

        3.like通配符可能导致索引失效。

        4.联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。

        5.在索引列上使用mysql的内置函数,索引失效。

        6.对索引列运算(如,+、-、*、/),索引失效。

        7.索引字段上使用(!= 或者 < >,not in)时,可能会导致索引失效。

        8.索引字段上使用is null, is not null,可能导致索引失效。

        9.左连接查询或者右连接查询查询关联的字段编码格式不一样,可能导致索引失效。

        10.MySQL优化器估计使用全表扫描要比使用索引快,则不使用索引。文章来源地址https://www.toymoban.com/news/detail-809720.html

到了这里,关于面试:数据库索引常见问法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openGauss学习笔记-204 openGauss 数据库运维-常见故障定位案例-重建索引失败

    204.1 重建索引失败 204.1.1 问题现象 当Desc表的索引出现损坏时,无法进行一系列操作,可能的报错信息如下。 204.1.2 原因分析 在实际操作中,索引会由于软件或者硬件问题引起崩溃。例如,当索引分裂完发生磁盘空间不足、出现页面损坏等问题时,会导致索引损坏。 204.1.3 处

    2024年01月24日
    浏览(37)
  • java八股文面试[数据库]——数据库三范式

    什么是范式? 范式是数据库设计时遵循的 一种规范 ,不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF): 属性不可分割 ,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 理解:一个列不能包含两个数据 第二范式(2NF):满足第一范式;且不存在

    2024年02月10日
    浏览(27)
  • JAVA面试数据库篇

    目录 数据库篇 一.优化 1.定位慢查询 MYSQL中,如何定位慢查询? 2.SQL执行计划 SQL语句执行慢,如何分析呢? 3.索引 了解过索引吗?(什么是索引) 索引的底层数据结构了解过吗? B树和B+树的区别是什么呢? 什么是聚簇索引什么是非聚簇索引?/什么是聚集索引,什么是二级索

    2024年02月13日
    浏览(23)
  • JAVA面试部分——后端-数据库前篇

    5.1 mysql中char和varchar的区别,varchar(100)中的一百的含义,能存放多少汉字? 在MySQL中,CHAR和VARCHAR都是用来存储字符串的数据类型,但它们之间存在一些主要区别。 存储方式:CHAR是固定长度的,而VARCHAR是可变长度的。这意味着CHAR会根据你设定的长度存储字符串,即使实际

    2024年01月16日
    浏览(33)
  • JAVA-软开-常见八股文(2)-数据库相关

    1 Drop Delete Truncate三者之间的区别和联系 drop删除整张表,包括表结构和表数据。用法 drop table 表名 truncate表示清空数据,不会删除表结构。truncate table 表名 delete表示删除数据,不会删除表结构。delete from 表名 where 列名 = 值, 那么,truncate和delete的区别:             trunca

    2024年02月06日
    浏览(34)
  • JAVA面试部分——后端-数据库后篇

    5.16 多个人同时对数据进行操作,对事务的操作应该怎么解决 在多个人同时对数据进行操作的情况下,需要保证数据的一致性和完整性。以下是一些解决事务操作的方法: 使用数据库事务:数据库事务是一组一起执行的语句,如果其中任何一个语句发生错误,整个事务将回滚

    2024年01月22日
    浏览(36)
  • 常见java,数据库锁汇总篇,舍我其谁

    1.乐观锁 在select的时候不会加锁,是基于程序实现的,所以不会存在死锁的情况。 适用于读多写少的场景(写的并发量相对不高),可以提高系统的吞吐量。 因为如果写多的话,乐观锁会有很大机率更新失败,需要不断的自旋执行查找和更新操作。 自旋的时候会一直占用

    2024年01月25日
    浏览(20)
  • 新版Java面试专题视频教程——数据库篇

    = = = = = = = = = = = = = 数据库篇 = = = = = = = = = = = = = 01-MySQL篇-课程介绍 MySQL 进阶篇1.0 索引 SQL优化 视图 锁 02-优化-如何定位慢查询 MySQL中,涉及到慢查询都有哪些? 聚合查询 多表查询 表数据量过大查询 深度分页查询 表象:页面加载过慢、接口压测响应时间过长(超过1s) MySQL中,

    2024年02月19日
    浏览(30)
  • java八股文面试[数据库]——慢查询优化

    分析慢查询日志 直接分析慢查询日志, mysql使用 explain + sql语句进行模拟优化器来执行分析。 oracle使用explain plan for + sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释: table 显示这一行的数据是关于哪张表的 type 这是重要的

    2024年02月10日
    浏览(29)
  • Java面试之数据库篇(offer 拿来吧你)

    现在关于Java面试的资料是层出不穷,对于选择困难症的同学来说,无疑是陷入了一次次的抉择与不安中,担心错过了关键内容,现在小曾哥秉持着\\\"融百家之所长,汇精辟之文档\\\"的思想,整理一下目前主流的一些八股文,以达到1+1 2 的效果! 1、什么是DB?DBMS?DBS?DBA? 上面名词傻

    2024年02月02日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包