索引在数据库中的应用分析

[调参神器]使用VOFA+上位机进行PID调参(附下位机代码) ​ 简单地来说,VOFA+是一个超级串口助手,除了可以实现一般串口助手的串口数据收发,它还可以实现数据绘图(包括直方图、FFT图),控件编辑,图像显示等功能。​ 如果只是想要用VOFA+来进行数据绘图,直接使用一个波形图控件就行,但是如果想要把VOFA+当作一个长期使用的调参助手,我们最好设置一下控件。VOFA+简洁好用,但是又有点太简洁了,部分体验并不是很好(比如不能调整控件大小,保存文件不太方便等),所以如果学有余力,推荐自己用QT/PyQT写上位机。接下来,我们要将指令中的数据提取出来。 阅读详情

索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。

 

索引的管理成本

1、  存储索引的磁盘空间

2、  执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护

3、  在数据处理时回需额外的回退空间。

 

实际数据修改测试:

一个表有字段A、B、C,同时进行插入10000行记录测试

在没有建索引时平均完成时间是2.9秒

在对A字段建索引后平均完成时间是6.7秒

在对A字段和B字段建索引后平均完成时间是10.3秒

在对A字段、B字段和C字段都建索引后平均完成时间是11.7秒

从以上测试结果可以明显看出索引对数据修改产生的影响

 

索引按存储方法分类

B*树索引

B*树索引是最常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页。一般索引及唯一约束索引都使用B*树索引。

位图索引

位图索引储存主要用来节省空间,减少ORACLE对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多的表字段。位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除、修改、新建操作,ORACLE每次进行操作都会对要操作的数据块加锁,所以多人操作很容易产生数据块锁等待甚至死锁现象。在OLAP(数据分析处理)中应用位图有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所以大量数据采用位图索引节省空间比较明显。

 

索引按功能分类

唯一索引

唯一索引有两个作用,一个是数据约束,一个是数据索引,其中数据约束主要用来保证数据的完整性,唯一索引产生的索引记录中每一条记录都对应一个唯一的ROWID。

 

主关键字索引

主关键字索引产生的索引同唯一索引,只不过它是在数据库建立主关键字时系统自动建立的。

一般索引

一般索引不产生数据约束作用,其功能主要是对字段建立索引表,以提高数据查询速度。

 

 

索引按索引对象分类

 

单列索引(表单个字段的索引)

多列索引(表多个字段的索引)

函数索引(对字段进行函数运算的索引)

建立函数索引的方法:

create index 收费日期索引 on GC_DFSS(trunc(sk_rq))

create index 完全客户编号索引 on yhzl(qc_bh||kh_bh)

在对函数进行了索引后,如果当前会话要引用应设置当前会话的query_rewrite_enabled为TRUE。

alter session set query_rewrite_enabled=true

注:如果对用户函数进行索引的话,那用户函数应加上 deterministic参数,意思是函数在输入值固定的情况下返回值也固定。例:

create or replace function trunc_add(input_date date)return date deterministic

as

begin

    return trunc(input_date+1);

end trunc_add;

 

应用索引的扫描分类

INDEX UNIQUE SCAN(按索引唯一值扫描)

select * from zl_yhjbqk where hbs_bh='5420016000'

INDEX RANGE SCAN(按索引值范围扫描)

select * from zl_yhjbqk where hbs_bh>'5420016000'

select * from zl_yhjbqk where qc_bh>'7001'

INDEX FAST FULL SCAN(按索引值快速全部扫描)

select hbs_bh from zl_yhjbqk order by hbs_bh

select count(*) from zl_yhjbqk

select qc_bh from zl_yhjbqk group by qc_bh

 

什么情况下应该建立索引

表的主关键字

自动建立唯一索引

如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)

表的字段唯一约束

ORACLE利用索引来保证数据的完整性

如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)

直接条件查询的字段

在SQL中用于条件约束的字段

如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)

select * from zl_yhjbqk where qc_bh=’7001’

查询中与其它表关联的字段

字段常常建立了外键关系

如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)

select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’

 

查询中排序的字段

排序的字段如果通过索引去访问那将大大提高排序速度

select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)

select * from zl_yhjbqk where qc_bh='7001' order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)

查询中统计或分组统计的字段

select max(hbs_bh) from zl_yhjbqk

select qc_bh,count(*) from zl_yhjbqk group by qc_bh

 

什么情况下应不建或少建索引

表记录太少

如果一个表只有5条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出,处理速度显然会比用索引快。

如表zl_sybm(使用部门)一般只有几条记录,除了主关键字外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问。如:

select * from zl_sybm where sydw_bh='5401'(对sydw_bh建立索引不会产生性能优化)

 

经常插入、删除、修改的表

对一些经常处理的业务表应在查询允许的情况下尽量减少索引,如zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等业务表。

 

数据重复且分布平均的表字段

假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

 

经常和主字段一块查询但主字段索引值比较多的表字段

如gc_dfss(电费实收)表经常按收费序号、户标识编号、抄表日期、电费发生年月、操作标志来具体查询某一笔收款的情况,如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。

 

如何只通过索引返回结果

一个索引一般包括单个或多个字段,如果能不访问表直接应用索引就返回结果那将大大提高数据库查询的性能。对比以下三个SQL,其中对表zl_yhjbqk的hbs_bh和qc_bh字段建立了索引:

1 select hbs_bh,qc_bh,xh_bz from zl_yhjbqk where qc_bh=’7001’

 

 

执行路径:

SELECT STATEMENT, GOAL = CHOOSE         11  265 5565

 TABLE ACCESS BY INDEX ROWID    DLYX    ZL_YHJBQK   11  265 5565

  INDEX RANGE SCAN  DLYX    区册索引    1   265

平均执行时间(0.078秒)

2 select hbs_bh,qc_bh from zl_yhjbqk where qc_bh=’7001’

执行路径:

SELECT STATEMENT, GOAL = CHOOSE         11  265 3710

 TABLE ACCESS BY INDEX ROWID    DLYX    ZL_YHJBQK   11  265 3710

  INDEX RANGE SCAN  DLYX    区册索引    1   265

平均执行时间(0.078秒)

3 select qc_bh from zl_yhjbqk where qc_bh=’7001’

执行路径:

SELECT STATEMENT, GOAL = CHOOSE         1   265 1060

 INDEX RANGE SCAN   DLYX    区册索引    1   265 1060

平均执行时间(0.062秒)

 

从执行结果可以看出第三条SQL的效率最高。执行路径可以看出第1、2条SQL都多执行了TABLE ACCESS BY INDEX ROWID(通过ROWID访问表) 这个步骤,因为返回的结果列中包括当前使用索引(qc_bh)中未索引的列(hbs_bh,xh_bz),而第3条SQL直接通过QC_BH返回了结果,这就是通过索引直接返回结果的方法。

 

如何重建索引

alter index 表电量结果表主键 rebuild

 

如何快速新建大数据量表的索引

如果一个表的记录达到100万以上的话,要对其中一个字段建索引可能要花很长的时间,甚至导致服务器数据库死机,因为在建索引的时候ORACLE要将索引字段所有的内容取出并进行全面排序,数据量大的话可能导致服务器排序内存不足而引用磁盘交换空间进行,这将严重影响服务器数据库的工作。解决方法是增大数据库启动初始化中的排序内存参数,如果要进行大量的索引修改可以设置10M以上的排序内存(ORACLE缺省大小为64K),在索引建立完成后应将参数修改回来,因为在实际OLTP数据库应用中一般不会用到这么大的排序内存。

 

叶正盛
2003-08-15

零基础入门篇③ PyCharm使用指南(个性化设置、开发必备插件、常用快捷键) Python从入门到精通👉零基础入门篇③ 阅读详情

相关推荐

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1772

索引在ORACLE数据库中的应用分析(原创)

索引在数据库中的应用分析  索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。 索引的管理成本1、  存储索引的磁盘空间2、  执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护3、  在数据处理时回需额外的回退空间。 实际数据修改测试:一个表有字段A、B、C,同时进行

MKing's Blog 2232

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

oracle 索引的定义及使用

索引是建立在表上的可选数据库对象,是一组排序后的的索引键。主要用于加快数据的检索,类似于书籍的目录,快速定位到目标数据。索引在物理上和逻辑上都是独立的,创建或删除索引对基表不会有影响。当对基表进行DML操作时Oracle会自动管理索引,无需手动处理。

ww981580010的博客 5470

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

航空机载总线网络概述

1.机载总线网络概述 现代战斗机的航空电子系统是航空电子技术经历了半个多世纪的漫长演变和不断进步的结果。航空电子系统结构的每次变化,其核心的机载总线网络技术也不断跨上新台阶,而且每次变革都能使飞机性能得到大幅提升。现代飞机的飞行与作战任务包括起飞、巡航、飞行控制、目标搜索、识别跟踪、火控计算、武器投射、制导、电子战、通信等,都需要航空电子系统承担,航空电子系统是现代战斗机的“大脑”和“神经中枢”,机载总线网络则是其关键的“神经网络”。在机载通讯领域发展过程中,具有代表性的典型总线有ARINC429、1553

qq_41854911的博客 1万+

oracle的索引的使用,关于Oracle中索引的使用

oracle的索引的使用,关于Oracle中索引的使用

So_langdechibang的博客 2494

DMA学习笔记

DMA(direct memory access,直接内存访问),是一种避开CPU,可以直接对外设和内存进行访问的技术,可以实现外设与内存、内存之间、外设之间的数据的访问和搬移。

weixin_46220498的博客 3113

Oracle 索引 详解

<br />一.索引介绍<br /> 1.1 索引的创建语法: <br />CREATE UNIUQE | BITMAP INDEX <schema>.<index_name><br />      ON <schema>.<table_name><br />           (<column_name> | <expression> ASC | DESC,<br />            <column_name> | <expression> ASC | DESC,...)<br />     T

无双小宝 4050

哨兵2号遥感影像解析全流程:步骤、算法与AI应用详解

未来,多源数据融合与边缘计算技术的应用将进一步拓展遥感解析的边界。波段合成:选择10m分辨率波段(如B2、B3、B4、B8)进行Layer Stacking,生成多光谱影像。| 分类与识别 | Scikit-Learn、PyTorch | SVM、CNN、K-Means聚类 | 地块分类、目标检测 || 数据预处理 | SNAP、Sen2Cor | 大气校正、几何校正 | L2A产品生成、格式转换 || 波段融合 | ENVI、GDAL | Layer Stacking、重采样 | 多光谱影像合成 |

zhz5214的博客 2711

2026.3.28:langgraph使用mysql进行持久化会话存储(短期记忆和长期记忆)

本文介绍了如何使用MySQL持久化存储LangGraph会话数据(短期和长期记忆)。首先安装必要的依赖包,然后通过Python代码实现将短期记忆写入MySQL数据库。主要步骤包括:1) 建立MySQL连接;2) 创建代理(agent)并配置检查点(checkpointer)和存储(store);3) 实现工具函数如计算器和天气查询;4) 使用中间件跟踪工具和模型调用次数。最后展示了如何从MySQL读取短期记忆数据,完成会话的持久化存储和检索功能。代码示例包含完整的实现细节,包括状态管理、消息处理和数据库操作

拥抱具身智能,昇腾Ascend C 735

索引在ORACLE数据库中的应用分析

索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。索引的管理成本1、  存储索引的磁盘空间2、  执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护3、  在数据处理时回需额外的回退空间。 实际数据修改测试:一个表有字段A、B、C,同时进行插入10000行记录测试在没有

可 科 的 家 1314

基于51单片机的电子记分牌的设计

基于51单片机的电子记分牌的设计 电子记分牌基于51单片机的电子记分牌的设计摘要1 引言2 总体设计方案2.1 设计思路(1)设计要求(2)设计思路(3)设计方案2.3综合设计方框图(1)硬件设计框图(2)软件设计3 设计原理分析3.1 电源、复位、下载电路的设计(见图1、2、3)3.2 时钟电路的设计3.3 矩阵键盘电路的设计3.4 数码管显示电路设计4程序代码 摘要 本设计为电子记分牌设计,是以STC89C52芯片为核心,辅以必要电路设计进行的。用4位LED七段数码管显示比赛两方的分数(每方分数用2位

行走的皮卡丘 2037

nutch 初次接触

最近一直在看lucene,了解到了 nutch,也同时了解了下 hadoop。 要在windows平台上使用nutch、hadoop ,需要安装cygwin,这个工具的安装很多blog上面都有介绍。我就不详细说了。关键是大家在安装的时候 选择把openssh也安装上。 这里先只说说我是如何运行起nutch的。 首先说下我的目录结构 F:   cygwin/              bin    ...

小孩No乖的专栏 163

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

nutch-2.1导入eclipse+mysql运行

初次接触nutch,记录下来 首先数据库 CREATE DATABASE nutch DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; 表 CREATE TABLE `webpage` ( `id` varchar(767) NOT NULL, `headers` blob, `te...

weixin_30273763的博客 184

VC中sqlite的使用

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

Lucene Nutch 入门简明教程总结(转载 收藏)

原文地址:http://cid-47027e68f36cbaf5.spaces.live.com/blog/cns!47027E68F36CBAF5!443.entry 先声明,是个菜鸟的总结。总结的是一件很菜鸟的事情。 事情的起因是1月2号,在实验室,黄黄的书架上看到一本书《Lucene in action》。觉得有意思,拿过来一看。又见Nutch是基于Lucene的一个开源

missingu1314的专栏 699

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

二次开发nutch的恩恩怨怨

[size=large] 今天下午,总算用脚本把自己二次开发的nutch跑起来了。从第一次接触nutch到现在,一年半接近两年的时间了。从开始的一无所知、凑合着用到后来的尝试梳理、阅读源码、放弃使用再到今年的坚定信念来攻克以至今日可以随意的修改满足自己的需求,心理历程不可谓不复杂。 nutch并不是很高深的技术,但是基于hadoop的mapreduce运算不禁让人生畏,敬而远之。我...

lies_joker的专栏 238

Hadoop 分布式处理软件框架

这里先大致介绍一下Hadoop.    本文大部分内容都是从官网Hadoop上来的。其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了。我的这一个系列的Hadoop学习笔记也是从这里一步一步进行下来的,同时又参考了网上的很多文章,对学习Hadoop中遇到的问题进行了归纳总结。    言归正传,先说一下Hadoop的来龙去脉。谈到Hadoop就不得不提到Lucene和Nutch。...

Ubuntu 14.04配置nfs服务 119

初次接触网络爬虫

最近研究爬虫,需求是根据url获取整个HTML,然后在从HTML中提取meta标签中的keywords的内容和description的内容,以及文章标题和文章正文内容。         在这篇微博中,没有什么技术所要讲的。我只是把自己的整体思路把我做的整体框架说一下。          当我接到这个任务的时候,有种感觉,就是完了,什么也不会,没接触过啊,不知道从哪下手。所以呢,在网上找了一些开

u013025479的专栏 1732

开始接触nutch,lucene,并做些开发了

这段时间一直在看nutch和lucene的资料。准备作个应用。相比而言,lucene的资料要多的多,但nutch的文档还十分欠缺,只能是一边在nutch的wiki上游荡,一边摸索着看代码了。

埃秒人生(MicroDream Soft) 1023

Luence Solr Nutch说明

Luence Solr Nutch说明                                             版本修订   版本 说明 作者 日期 0.1 初始版本 RockeyHoo 2013/09/06

RockeyHoo的专栏 1294

关于Nutch框架

在接触到一个新的事物的时候,根据人的认知过程,我们势必要知道这个新事物的是什么,即What;然后,便是为什么要认知这个新的事物,如果没有任何理由的话说明完全没有必要去了解它,因为它可能对我们没有一点用处,这就是所谓的Why;接着就是How,该如何认知一个新的事物,使用什么样的方式和手段,只有在通过逐步的迭代执行What这个步骤和实施How,我们才能逐步了解、认识、理解这个新事物,使其为我所使用。 ...

nhy520 224

nutch 安装配置

  之前接触过一些爬虫的东西,主要是编写脚本,爬取网页上想要的信息。最近了解了一个开源搜索引擎,这几天主要配置。遇到了一些问题。下面介绍一下安装的流程: 1、安装cygwin,主要用于window下提供linux的环境。具体安装过程可以参考http://hi.baidu.com/www100/item/b79723f239cf9449932af29f。注意选择需要的工具包。 2、cygwin中...

weixin_30468137的博客 158

nutch-0.9

浅入浅出nutch 0.9使用指南 for windows   Nutch 是一个搜索引擎,昨天刚从一个朋友那里知道,前一阵子接触了 lucene ,对搜索的东西跃跃欲试,趁着周末试用了一把,感觉蛮新鲜,网上的例子多是基于 0.7 版本的,找到了一些 0.8 的就是跑不起来,忽悠忽悠试了半天,写下一点感觉 ~~   系统环境: Tomcat 6.0.13/JDK1.6/nutch0

2220

对Nutch源码的分析记录,Crwal类及Fetcher类(1)

对Nutch源码的分析记录,Crwal类及Fetcher类

shenyuanv的专栏 1052
上一篇: SQL语句优化技术分析
下一篇: SQL Server 2000+ MS WIN2003群集服务配置
滴水禅师
博客等级 码龄22年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值