【索引】索引的介绍与优化

【PostgreSQL教程】PostgreSQL 高级篇之子查询 子查询也可称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、、>=、 阅读详情

1. 索引基础

  索引:存储引擎用于快速找到记录的数据结构

1.1 索引类型

1.1.1 B+ Tree

  B+ 树: 多路搜索树

 

  B+树能加快访问数据速度, 不需要访问全表来查询数据,而是从根节点中进行搜索, 根节点中保存了子节点的指针(并且包含子节点的上限与下限),选择正确的子节点进行查找,既可以找到对应值。

 

可以使用B-Tree 查询类型:

  使用如下表说明查询类型

Create Table People{
    f_name varchar(50) not null,
    l_name varchar(50) not null,
    birth date not null,
    gender enum('m','f') not null,
    key(f_name, l_name, birth)
}
  1. 全值匹配: 和索引中所有列匹配(所有列有 f_name, l_name, birth), 如: 查找 f_name 为‘Allen’ l_name 为 ‘Cuba’  生日是 '1990-01-01'的
  2. 匹配最左前缀: 匹配所有的前几列(一定要从左到右, 依次选,不能跳跃), 如 查找 f_name 为‘Allen’ l_name 为 ‘Cuba’ 的
  3. 匹配列前缀:匹配某一列值的开头, 如 查找f_name 为 ‘Allen’  并且 l_name 中第一个字为 ‘C’ 的人 
  4. 匹配范围值:用于查找 f_name 在 'Allen' 和 'Barrymore' 之间的

索引的限制:

  1. 如果不是从索引的最左列开始(第一列)则无法使用索引(如:无法查找生日为某一天的特定生日的人)
  2. 不能跳过索引中的列
  3. 如果查询中某个列有范围查询,则右边的索引都无法使用

 

哈希索引

  哈希索引采用Hash表实现, 只有精确匹配才有效, 存储引擎为每一列添加一个索引列计算得到的索引值,并且不同的值得到的索引不一样,hash存储在索引中,也在hash表中保存指向每个数据行的指针

限制

  1. 索引自身只需要存储 hash值,所以不能使用索引中的值来避免读取行
  2. 不能排序(按照hash读取的)
  3. 不支持匹配查找,只支持等值查找
  4. 存在hash冲突

 

全文索引

  一种特殊的索引,查找文中关键词,而不是比较索引的值,类似于搜索引擎,需要注意:停用词、词干和复数、布尔搜索等

 

1.2 索引优缺点

  • 减少了服务器需要扫描的数据量
  • 避免了排序和临时表
  • 将随机I/O改变为顺序I/O

 

索引类别

唯一索引:加速查询 + 列值唯一(null)

主键索引: 加速查询 + 列值唯一(null)

组合索引:多列值构成索引

覆盖索引:索引包含了查询的所有列,查询时候只需要执行一次查询就可以得到结果数据

聚簇索引

叶子结点是数据而非数据指针(InnoDB)

优点:

  • 把数据保存在一起
  • 数据访问快
  • 使用覆盖索引可以直接找到主键值

缺点:

  • 插入速度依赖于插入速度
  • 更新代价高
  • 在表中插入新行,或者主键被更新需要移动时候,可能面临页分裂
  • 全表扫描变慢(行比较稀疏,或者页分裂导致数据不连续)
  • 二级索引较大,在二级索引的叶子结点包含了主键的值, 需要再一次IO

  

    

 

  非聚簇索引

    叶子结点为数据指针而非数据

 

 

  

 

InnoDB 和 myisam 对比

数据分布

InnoDB

  

 

myisam

 

 

 

 

  

 

YOLO26改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型 本文记录的是基于MobileNet V4的YOLO26目标检测轻量化改进方法研究。主要用于轻量化应用部署,相关轻量化改进与其整体架构非常适配。通过整合、以及优化的,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中、、、和五种模型,以满足不同的需求。MobileNetV4: Universal Models for the Mobile Ecosystem是一系列适用于移动生态系统的通用高效模型。以下将详细介绍其轻量化设计的出发点、原理、结构和优势:的实现代码如下: 四、修改步骤 4.1 修 阅读详情

相关推荐

在Wincc8.0的Wincc 3D Control控件中使用3D模型

如果之前没有在Blender中自定义光照,EnableBackground属性选择“是”,Wincc 3D Control会按一个均匀的光照强度渲染。Wincc8.0更新后提供了一个Wincc 3D Control控件来显示3D图像,但是该控件实际体验下来现阶段还存在功能不足、运行不稳定的问题。再把导出的dae文件复制进Wincc项目的GraCS文件夹中,文件名称复制进控件的SceneFile属性里。选择编辑模式,全选模型,点击网格→分离→按材质,分离出不同的部件(不同的部件最好使用不同的材质)。

ghoring的博客 7132

Mysql之索引的分类

在了解mysql索引的分类之前,要先注意以下几点: 索引可以加快查询的速度,但是会影响插入数据的速度。(在插入数据的同时,数据库会按照索引排序。所以在插入大量的数据时,可以先删除索引,插入完成以后,再创建索引); 索引的最终目的是为了使查询数据的速度变快; 要根据实际情况,选择最合适的的索引方式; Mysql的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 普...

秋凉知意 1359

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 183

索引有哪些类型

索引有哪些类型

大连赵哥的博客 1812

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 456

从Axure转Figma?这篇编组、缩放、圆角、评论的对比指南帮你无缝切换

本文为资深Axure设计师提供了向Figma无缝迁移的实战指南。文章深度对比了编组、缩放、圆角、评论等核心操作,重点解析了Figma独特的自动布局、组件系统和实时协作功能,旨在帮助用户快速适应新工具,实现设计思维与工作效率的跃迁。

tomato的博客 850

你知道多少种索引?

fancy_Coding的博客 6026

扩展卡尔曼滤波 (EKF, Extended Kalman Filter) 算法详解及案例分析

扩展卡尔曼滤波是一种用于估计非线性动态系统状态的递归算法。其目标是通过结合非线性系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2385

mysql四种常用的索引_四种常见的索引类型

主键索引:数据记录里面不能有 null,数据内容不能重复,在一张表里面不能有多个主键索引。普通索引:使用字段关键字建立的索引,主要是提高查询速度唯一索引:字段数据是唯一的,数据内容里面能否为 null,在一张表里面,是可以添加多个唯一索引。全文索引:在比较老的版本中,只有 myisam 引擎支持全文索引,在 innodb5.6后引擎也支持全文索引,在 mysql 中全文索引不支持中文。我们一般使用...

weixin_34621186的博客 4381

面试问题总结——关于YOLO系列(三)

接着上篇的的YOLO系列面试问题总结,加油,冲! 三.YOLOv3 1.YOLOv3主干网络BackBone——Darknet-53网络结构(因为有53个卷积层) (原论文中Darknet53的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,而在YOLOv3中输入尺寸是416×416)   ①上图中,Top-1 Accuracy和Top-5 Accuracy是指什么呢?区别在哪呢?   我们知道ImageNet有大概1000个分类,而模型预测某张图片时,会给出1000个按概率从高.

boss-dog 1万+

Python 对接钉钉获取员工上一篇日报或周报内容

摘要:本文介绍使用Python对接钉钉API获取员工日报/周报的方法。首先需创建钉钉应用并开通日志权限,获取员工UserID。通过获取AccessToken进行鉴权,调用topapi/report/list查询日志记录,筛选最新日报/周报后,使用topapi/report/details获取详细内容。需注意权限控制、时间范围筛选和模板匹配等问题。文末提供完整代码示例,并建议扩展自动化触发、数据存储等功能。该方法适用于企业自动化获取员工工作日志的场景。

从技术实践立足,从项目管理方法论延伸思考 807

常见索引类型

日常开发工作中,涉及到的数据存储,要做查询优化或想深入了解存储引擎,需要对索引知识有个起码的了解,下面介绍下最常见的四种索引结构。 位图索引 哈希索引 BTREE索引 倒排索引 1、位图索引(BitMap) 位图索引适用于字段值为可枚举的有限个数值的情况 位图索引使用二进制的数字串(bitMap)标识数据是否存在,1标识当前位置(序号)存在数据,0则表示当前位置没有数据。 ​图1 为用户表,存储了性别和婚姻状况两个字段。 ​图2中 分别为性别和婚姻状态建立了两个位图索引; 例如:性别->男对

Gsasuke的博客 5884

IEC61850规约客户端软件开发实战(第二章)

本文介绍了基于IEC61850规约的客户端软件开发过程,重点阐述功能界面设计和服务端连接功能的实现。界面采用Qt框架设计,包含功能按钮区、数据模型展示区(使用QTreeWidget)和状态显示区。连接功能通过libiec61850开源库实现,详细说明了连接流程、句柄创建及状态管理的代码实现。测试结果表明系统能正确识别连接状态,并通过界面直观显示。文章为IEC61850规约软件开发提供了实用参考,下期将分享规约模型数据加载的实现过程。

半青年的博客 2855

索引优化分析_索引介绍

按照聚簇索引排列顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多个数据块中提取数据,所以节省了大量的io操作。,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。3.如下图,左侧的索引就是聚簇索引,因为数据行在磁盘的排列和索引排序保持一致。这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。1.左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。

daai5201314的博客 265

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SQL的优化及索引介绍

今天看到了一个贴子,简单介绍一下: 影响查询性能的两个关键因素: 索引,表扫描次数 所以优化的目标就是怎样更好的利用索引和减少表扫描次数 不过得先知道什么是索引?索引有什么特点?有几种类型的索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。 索引是一

Hello World! 896

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

介绍MySQL的索引优化,并学习怎么进行索引优化

MySQL 索引优化是数据库优化的一个重要方向。优化索引可以提高查询速度和执行效率,减少资源的消耗。

LJH_java10086的博客 263

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mysql索引的分类php_MySQL索引介绍与索引优化

前几天PHP初学者官方群[168159147]里有些新手提问关于MySQL索引的相关问题,比如MySQL索引怎么用,MySQL索引何时用,MySQL索引使用准则,MySQL索引的优化及MySQL索引的优缺点等。下面天涯PHP博客结合互联网上的一些知识点,做一个简单的总结及概述,以供新手学习。[1] MySQL索引简介[1.1] MySQL索引使用场景索引一般用于在数据规模大时对查询进行优化的一种机...

weixin_39883208的博客 102

MySQL 索引介绍与索引优化的简单介绍

在 MySQL 的性能优化体系里,索引是最重要、也最容易被误用的一环。很多慢查询并不是因为 SQL 写得有多复杂,而是因为没有合理使用索引;也有很多线上事故,表面看是“数据库慢了”,本质上却是索引设计不合理、查询条件失效、索引过多导致写入性能下降。如果把数据库比作图书馆,那么表数据就是一本本书,索引就是目录。没有目录,你要找一本书只能一本本翻;有了目录,你可以迅速定位到目标内容。但目录也不是越多越好,目录太多不仅占空间,还会让每次新增、修改、删除都变慢。索引(Index)是一种帮助数据库快速定位数据。

panzer_maus的博客 425

mysql索引介绍,sql优化

1.索引简介 什么是索引:MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 可以得到索引的本质:索引是数据结构。 好处:类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本,通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗 坏处:1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDAT...

oldshaui的博客 582

sqlserver索引介绍及优化

(一)深入浅出理解索引结构         实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:   其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查

zhujyy110的专栏 2840

mongodb数据库索引介绍与优化选择

MongoDB 索引索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

weixin_44834554的博客 1485

MySql语句优化以及索引介绍

1:mysql索引介绍 2:mysql查询优化

zz18532164242的博客 217

关于MYSQL索引的原理与优化策略介绍

MySQL索引是一种用于加速数据库查询的数据结构,它类似于书籍的目录,能够快速指导我们找到需要的信息。本文将带你介绍MySQL索引的原理与优化策略,感兴趣的小伙伴可以参考阅读。

xinyuerr的博客 67

explain工具 索引优化介绍

explain中的列 CREATE TABLE `actor` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CREATE TABLE `film` ( `id` int(11) NOT NULL, `name` varc

filling_l的博客 307

mysql索引优化,explain输出字段介绍

本文目录查看mysql的连接数索引聚簇索引和非聚簇索引(二级索引)的区别普通索引和唯一索引的区别创建索引语法删除索引语法explainexplain语法explain输出字段介绍前言-表结构idtableselect_typetypepossible_keys和keykey_lenrefrowsfilteredExtra 查看mysql的连接数 有时候mysql数据库卡是因为连接数过多导致的。所以查看链接数然后关闭一些不必要的连接也是调优的一种手段。 查看连接数: show processlist; 主动

weixin_45676738的博客 513

mysql 多个索引下的查询 php_MySQL索引以及查询优化的详细介绍

本篇文章给大家带来的内容是关于MySQL索引以及查询优化的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。文章《MySQL查询分析》讲述了使用MySQL慢查询和explain命令来定位mysql性能瓶颈的方法,定位出性能瓶颈的sql语句后,则需要对低效的sql语句进行优化。本文主要讨论MySQL索引原理及常用的sql查询优化。一个简单的对比测试前面的案例中,c2c_zwdb...

weixin_35846141的博客 312
上一篇: 【Java】杂项、Equals 和 hashCode
下一篇: 【HTTP请求】、详解
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值