13.数据库的索引

数据库面试题13索引使用规则 数据库索引是提升查询性能的关键工具。合理创建索引应遵循:为WHERE条件列、JOIN连接列、ORDER BY/GROUP BY列建索引;利用复合索引的最左前缀原则;选择高选择性列;考虑覆盖索引。避免过度索引、为小表或NULL值过多的列建索引,注意索引失效场景(如使用函数、LIKE通配符开头等)。需定期维护索引碎片,监控使用情况,通过执行计划优化索引。不同数据库有特定规则,如聚集/非聚集索引、函数索引等特性。正确使用索引能显著提升查询效率,但不当使用反而会降低性能。 阅读详情

一.索引的定义

索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。 在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。


索引的创建原则:

  • 1、经常用作where条件或连接条件的列
  • 2、值的范围比较大的列
  • 3、包含大量空值的列
  • 4、数据量大,但查询结果小于表的2%-4%之间

二.建立索引的优点:

  • 1.大大加快数据的检索速度;
  • 2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
  • 3.加速表和表之间的连接;
  • 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

三.索引类型:

1.唯一索引:
唯一索引是不允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。
2.非唯一索引:
非唯一索引是相对唯一索引,允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,数据库是允许将新创建的索引与表一起保存。这时数据库不能防止添加将在表中创建重复键值的新数据。
3.主键索引:
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问.
4.聚集索引(也叫聚簇索引):
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度


四.B树

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


五.B+树(效率比B树高)/(Mysql和Oracle的索引原理)

特点:

  • 1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
  • 2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  • 3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

在这里插入图片描述

六.B树和B+树比较

B+树相比B树的优势:
  1.单一节点存储更多的元素,使得查询的IO次数更少;(节点中只存指针)
  2.所有查询都要查找到叶子节点,查询性能稳定;
  3.所有叶子节点形成有序链表,便于范围查询。


七.索引失效的几种情况

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
在这里插入图片描述
2.对于多列索引,不是使用的第一部分(第一个),则不会使用索引
3.like查询是以%开头在这里插入图片描述
4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

此外,查看索引的使用情况 show status like ‘Handler_read%’; 大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数
handler_read_rnd_next:这个值越高,说明查询低效


1) 没有查询条件,或者查询条件没有建立索引
2) 在查询条件上没有使用引导列
3) 查询的数量是大表的大部分,应该是30%以上。
4) 索引本身失效
5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等) 错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;
6) 对小表查询
7) 提示不使用索引
8) 统计数据不真实
9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。
10) 隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效. 错误的例子:select * from test where tu_mdn=13333333333; 正确的例子:select * from test where tu_mdn=‘13333333333’;
12) 1<> 2单独的>,<(有时会用到,有时不会)
13) like “%_” 百分号在前.
14) 表没分析.
15) 单独引用复合索引里非第一位置的索引列.
16) 字符型字段为数字时在where条件里不添加引号.
17) 对索引列进行运算.需要建立函数索引.
18) not in ,not exist.
19) 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
20) B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走
21) 联合索引 is not null 只要在建立的索引列(不分先后)都会走, in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),或者=一个值; 当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

13、数据库索引与关联技术详解 本文详细解析了数据库索引与关联技术的核心概念、实现方法及应用场景。内容涵盖有序索引、B+树索引、哈希关联、多级索引、位图索引、网格文件等主流技术,深入探讨了索引与关联技术的优缺点及其在实际数据库系统中的选择策略。同时,文章通过流程图和案例分析,帮助读者更直观地理解如何根据数据量、更新频率和查询模式选择合适的技术,并提供优化建议。 阅读详情

相关推荐

13、数据库分区索引的全面解析与应用指南

本文详细解析了数据库分区索引的概念、类型及实际应用指南。内容涵盖分区索引的性能和维护优势、本地分区索引与全局分区索引的创建方法,以及如何根据应用场景选择合适的索引类型。同时,文章深入探讨了分区索引在数据仓库和OLTP系统中的应用特点,并提供了性能优化建议。通过本文,读者可以全面了解分区索引的技术细节及其在实际数据库管理中的应用价值。

sugar的博客 80

辨析:逻辑结构和物理结构中的两个索引文件

由于博主曾经把文件逻辑结构中的索引文件与文件物理结构中的索引文件混淆了,故作此文加以辨析 要辨析逻辑结构和物理结构中的两个索引文件,首先需要清楚文件的概念。文件本身由记录组成,而记录又由数据项组成。 而所谓文件的逻辑结构实际上说的就是文件的内部,数据逻辑上是如何组织起来的,是为在文件中查找数据而服务的。 因此,有结构文件中的索引文件,就是将文件内部分为索引表与逻辑文件两部分。 文件的物理结构则是描述文件在外存上的安置、链接、编目的方法,是针对整个文件的,是为系统给文件分配内存服务。 因此,物理结构中的.

quiet2333的博客 1959

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.csdn.net/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

数据库——索引

一、索引的概念  引用百度百科中的描述:在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。  索引采用的数据结构是B+树(即平衡树),而非二叉树,有的数据库也使用Hash桶作为索引的数据结构。B+Tree...

如不來的博客 1583

stm32H743IIT6 cubemx HAL USB UVC摄像头基础

stm32性能已经很强了, 可以驱动ov5640摄像头, 所以可以把摄像头接在stm32上, 当作一个摄像头驱动器, 连接到电脑上 开发环境: stm32cubemx 6.0.1 单片机: 自己做的stm32h743iit6核心板,兼容正点原子 学习资料: 圈圈学USB 鱼鹰谈单片机 从零开始学习USBhttps://to-run-away.blog.csdn.net/article/details/85038393 整个项目是基于CDC串口上修改 1 stm32 USB 代码概览 ..

紫枫洛天的博客 7750

vue高德地图POI关键字搜索定位

最近在项目中遇到了关于地图的问题,首先为了满足需求从而使用的是JSAPI为2.0版本的。需求是根据关键字搜索定位到该位置。值得注意的是在使用 AMap.Event.addListener时 Event一定要大写的E,不然页面会报错。在地图上定义一个输入框,根据输入的位置进行提示,然后点击后跳转到对应的位置并打点标记。JSAPI主要使用这两个。

YL 2135

MySQL索引、事务、储存引擎

索引分为趑诵哝勤梶普通索引:针对所有字段,没有特殊的需求/规则0日唯一索引:针对唯一性的字段,仅允许出现一次空值组合索引目(多列/多字段组合形式的索引)(varchar char text)MySQ为了优化对文本内容搜索的一种机制A全文索引主键索引 :针对唯一性字段、且不可为空,同时一张表只允许包含一个主键索引6创建索引:在创建表的时候,直接指定indexalter修改表结构的时候,进行add添加index 直接创建索引indexPS:主键索引-》直接创建主键即可直接创建索引 index。

mikechen1的博客 998

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.csdn.net/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9284

MySQL:索引的页存储物理结构,是如何用B+树来实现的

主键索引的目录结构如下图 只要在一个主键索引里包含每个数据页跟它的最小主键值,就可以组成一个索引目录 然后后继你查询主键值,就可以在目录里二分查找直接定位到那条数据所属的数据页,接着到数据页里二分查找定位那条数据就可以了。 但是现在问题来了,你的表里的数据可能很多很多,比如有几百万、几千万,甚至单表几个亿的数据都是有可能的。所以此时你可能有大量的数据页,然后主键目录里就要存储大量的数据页和最小主键值。这怎么行呢? 所以在考虑这个问题的时候,实际上就是采用了一种把索引数据存储在数据页里的方式来做的。

OceanStar的博客 674

AWSIM模拟器 新增多相机

本文介绍了基于Unity6引擎对AWSIM自动驾驶模拟器的优化方案,主要针对多相机系统的扩展实现。作者通过修改EgoVehicle.cs和AutowareSimulationDemo.cs核心代码,将原单相机系统升级为5相机配置。关键技术点包括:1)使用List容器管理多个CameraSensor组件;2)完善相机初始化流程;3)配置5个相机UI显示窗口;4)修改ROS话题设置。优化后的系统可支持BEVFusion等多传感器融合算法的测试验证,为Autoware.universe 0.45.0及以上版本提供

W805698955的博客 831

标准测试测试数据STDF学习笔记

本文介绍了STDF(Standard Test Data Format)文件的结构与解析方法。首先详细说明了STDF记录的组成,包括记录头类型(REC_TYP和REC_SUB)、数据类型定义、时间日期格式以及无效数据标识。重点分析了25种主要记录类型的功能、数据内容和出现位置,如FAR、MIR、MRR等关键记录。然后介绍了基于pystdf开源工具的解析方法,包括自带脚本的使用和自编程解析流程,通过事件驱动机制处理数据流。特别指出测试数据是按照PIR→PTR/MPR/FTR→PRR的循环模式组织。文章为ATE

歌颂苦难的行为是无耻的; 1513

数据库索引

我坐在面试官的对面,声情并茂的做着自我介绍,面试官小哥哥面无表情的翻看着我的简历。不知道是小哥哥过于高冷还是被我的简历吸引,2分钟了,小哥哥还是没有和我讲一句话。嘤嘤嘤~看起来似乎有两下子。不过无所谓,这些都不重要。 什么是索引? 面试官:我看你项目中有做过 SQL 优化,那我们今天就来聊聊索引吧。 (索引能问些啥,无非是索引的概念、索引的使用规则、索引的分类、索引的原理。嘻嘻~我早有准备) 我:数据库中的索引,简单来说呐,就好比一本书的目录,它可以帮我们快速进行特定值的定位与查找,从而加快数据

weird_9的博客 385

十年芯片资深IC设计工程师面经系列(四)SDC约束

set_driving_cell:当我们的设计是模块级(Block level)的design时,我们的设计前面一般还有其他的设计,那么前面模块的输出便是我们模块的输入,5.1set_false_path:可以单独的时钟或者路径进行约束。set drive :当我们的设计是芯片级(Chip level)的顶层设计时,芯片外围电路要驱动的是负载较大的IO单元,故需要的驱动能力较强,:set_load 是指output端口的负载,设置的值会影响输出到端口的net上的电容,从而影响相应的路径延时。

weixin_47349046的博客 1773

【数据库】13种会导致索引失效语句写法

数据库的索引是保证数据快速查询的重中之重,以下13种会导致索引失效语句会导致你的SQL查询索引失效,具体如下:1、使用like关键字模糊查询时,% 放在前面索引不起作用,只有“%”不在第...

IT技术分享社区 2245

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Exchange2013 CU13数据库内容索引失败

近期一个项目中,客户使用Exchange2013 CU13邮件服务器,后端做了DAG高可用,五个数据库副本内容索引均处于失败,提示报错“An Internel error occurred for the database or its index”,删除重建索引和重启服务均无法解决问题。查看后端服务器系统日志,出现大量EventID1008,1009,1010告警 最终在technet上找到相关...

weixin_33964094的博客 552

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

下列哪条语句不会引起mysql的索引失效_【数据库】13种会导致索引失效语句写法...

数据库的索引是保证数据快速查询的重中之重,以下13种会导致索引失效语句会导致你的SQL查询索引失效,具体如下:1、使用like关键字模糊查询时,% 放在前面索引不起作用,只有“%”不在第一个位置,索引才会生效(like ‘%文’–索引不起作用)2、使用联合索引时,只有查询条件中使用了这些字段中的第一个字段,索引才会生效3、使用OR关键字的查询,查询语句的查询条件中只有OR关键字,且OR前后的两个条...

weixin_42104906的博客 1023

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用awk求和某一列+bash循环+下载gg13数据库以及建立索引

做课题遇到的小问题,随手记录 1. 下载greengenes13_5数据库 + 用bowtie2建立索引+ 统计长度 greengene是有名的16S数据库,里面有多个版本,此次我使用的是13_5的版本 https://greengenes.secondgenome.com/?prefix=downloads/greengenes_database/链接网址 选择想要下载的版本,选择fasta.gz右击地址复制 下载fasta序列 后面我需要比对 所以下载这个 wget htt...

tudou的博客 530

Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008

Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008   全文索引操作   4.全文索引和like语句比较 1  5.倒排索引 inverted index 1 2.SQL Server 2008全文检索 2 3.Lucene全文检索 3 一般情况,使用SQL Server中的全文索引,经过大体4个步骤: 4 Mssql2008的全文索引操

attilax的专栏 1513

数据库系统 第13节 索引

通过为常用的查询条件创建索引,我们可以显著提高查询效率。在这个例子中,我们为每个常见的查询条件创建了一个单独的索引,这有助于加速查询。然而,需要注意的是,索引也会增加写入操作的成本,因此在创建索引时需要进行权衡。希望这个例子对你有所帮助!如果你有任何问题或需要进一步的解释,请随时提问。这次我们将通过一个关于博客平台的例子来展示如何使用索引来优化查询性能。通过为常用的查询条件创建索引,我们可以显著提高查询效率。在这个例子中,我们为每个常见的查询条件创建了一个单独的索引,这有助于加速查询。

hummhumm的专栏 1197

13-修复数据库,表,索引

一、注意点 1.修复数据库的时候,要把数据库设置为单用户模式,修复完成后,再设置为多用户,脚本如下: (1).将数据库设置为单用户模式  alter database run set single_user with rollback immediate (2).将数据库设置为多用户模式  alter database run set multi_user with rollbac...

dingwenyu0052的博客 233

PG 13数据库索引

weixin_46196889的博客 671

【数据库索引】——2020.01.13

目录 数据库索引 创建索引的方法 索引的类型 数据库索引 数据库索引是存储引擎用于快速查询的一种数据结构,通常使用B树和B+树来实现。因为索引所需的物理空间会随着数据量的增加而增大,建立和维护索引的成本也随之增大,所以,对于小型的表,全表搜索效率更高,对于中大型的表,索引更有效。 索引可以包含一个列或多个列的值,在创建索引时,考虑在哪些列上建立索引是十分重要的: 在经常需要搜索的列上...

大彬的博客 187

《数据库系统概念》13-索引

​索引分为顺序索引(ordered indixes)和散列(hash indices)索引,前者基于值的顺序;后者将值平均分布到若干bucket中,值所属的bucket由散列函数决定。 索引和散列的实现技术有多种,但没有哪一种是绝对最好的,每种方式有其最适合的场景,可通过这几个方面来进行评估:访问类型(能有效支持的访问类型,如特定值查找、范围查找)、访问时间、插入时间、删除时间、空间开销(索引额

zhixin9001的博客 470

13、数据库技术中的索引优化与应用

本文深入探讨了数据库技术中的索引优化与应用,包括索引的基本概念、类型、工作原理及优化策略。同时,结合电子商务、社交媒体和医疗信息系统等实际案例,展示了索引在大规模数据集中的应用,并提供了多种优化技巧以提升查询性能。

cheese的博客 922

Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008

Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008   全文索引操作   4.全文索引和like语句比較 1  5.倒排索引 inverted index 1 2.SQL Server 2008全文检索 2 3.Lucene全文检索 3 普通情况,使用SQL Server中的全文索引,经过大体4个步骤: 4 Mssql20...

weixin_33928137的博客 145
上一篇: SSM中使用分页插件实现分页
下一篇: 11.Mysql的常用函数
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值