读书笔记:解锁数据库查询新姿势:函数索引让你的搜索又快又准

news/2025/10/24 16:57:24/文章来源:https://www.cnblogs.com/www-htz-pw/p/19163801

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

解锁数据库查询新姿势:函数索引让你的搜索又快又准

你是否遇到过这样的情况:在数据库中搜索用户名时,希望不区分大小写,但查询速度却慢得让人抓狂?或者想要基于复杂计算的结果来快速查找数据,却不知道如何实现?这就是函数索引大显身手的时候了!

什么是函数索引?

简单来说,函数索引允许我们对计算后的列值创建索引,而不仅仅是原始数据列。比如,你可以创建一个基于"大写转换后姓名"的索引,从而实现不区分大小写的快速搜索。

为什么需要函数索引?

  1. 实现简单,见效快 - 只需创建一个索引,现有查询就能立即加速
  2. 零代码修改 - 无需改动现有应用程序逻辑或查询语句
  3. 扩展SQL能力 - 可以基于自定义函数创建索引,实现特殊搜索需求

实战案例:不区分大小写的搜索

假设我们有一个员工表(EMP),需要按姓名搜索但不区分大小写。

传统方法的困境

在过去,要实现这个功能需要:

  • 添加一个额外列(如UPPER_ENAME)
  • 编写触发器在插入/更新时自动填充这个列
  • 为这个新列创建索引

这种方法既麻烦又增加了维护成本。

函数索引的优雅解决方案

现在只需一步就能搞定:

CREATE INDEX emp_upper_idx ON emp(UPPER(ename));

创建这个索引后,任何使用WHERE UPPER(ename) = 'KING'的查询都会自动使用索引,速度极快!

更强大的应用:自定义函数索引

有时候我们需要更复杂的搜索逻辑。比如,实现一个自定义的语音搜索功能(类似Soundex算法)。

创建自定义函数

首先,我们创建一个将文字转换为语音代码的函数:

CREATE OR REPLACE FUNCTION my_soundex(p_string IN VARCHAR2) 
RETURN VARCHAR2 DETERMINISTIC
AS
-- 函数实现细节
BEGIN-- 将输入字符串转换为语音代码RETURN l_return_string;
END;
/

注意这里的DETERMINISTIC关键字很重要,它告诉Oracle:相同输入总是产生相同输出,这是创建函数索引的前提。

创建函数索引

由于函数返回的是字符串,我们需要使用SUBSTR来限制索引大小:

CREATE INDEX emp_soundex_idx ON emp(SUBSTR(my_soundex(ename), 1, 6));

性能对比

让我们看看使用函数索引前后的性能差异:

没有索引时:

  • 查询时间:约0.2秒
  • 函数被调用:9916次(几乎每行一次)
  • 需要全表扫描

有索引后:

  • 查询时间:约0.01秒(提升20倍!)
  • 函数被调用:仅1次
  • 使用索引范围扫描

虽然插入数据时稍微慢了一点(0.30秒→0.57秒),但查询性能的提升远远超过了这点代价。毕竟,数据一次插入,却要多次查询!

让使用更简单:隐藏复杂性

直接使用SUBSTR(my_soundex(ename), 1, 6)这样的表达式既不方便又容易出错。我们可以通过两种方式简化:

方法一:使用视图

CREATE OR REPLACE VIEW emp_v AS
SELECT ename, SUBSTR(my_soundex(ename), 1, 6) ename_soundex, hiredate
FROM emp;

然后就可以简单地查询:WHERE ename_soundex = my_soundex('Kings')

方法二:使用虚拟列(更推荐)

-- 添加虚拟列
ALTER TABLE emp ADD ename_soundex AS (SUBSTR(my_soundex(ename), 1, 6));-- 为虚拟列创建索引
CREATE INDEX emp_soundex_idx ON emp(ename_soundex);

这样就能直接查询:WHERE ename_soundex = my_soundex('Kings'),既简单又高效!

总结

函数索引是数据库性能优化的利器,特别适合以下场景:

  1. 不区分大小写的搜索
  2. 基于复杂计算的查询
  3. 使用自定义函数的特殊搜索需求

虽然创建函数索引会让数据插入稍慢一些,但查询性能的提升是巨大的。对于大多数读多写少的应用场景来说,这种权衡是非常值得的。

记住两个关键点:

  1. 函数必须是DETERMINISTIC(确定性的)
  2. 对于返回字符串的函数,使用SUBSTR控制索引大小

现在就试试函数索引吧,让你的数据库查询又快又准!

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产IPD项目管理软件推荐|别再靠 Excel 推 IPD 了!帮你把IPD流程从“纸上”搬进系统

本文盘点了国内能真正支撑 IPD 流程落地的几款软件,从配置灵活、可视化程度高的飞书项目,到深度面向研发的禅道,覆盖制造业、硬件、互联网等多场景。看完你就能判断:哪一款最适合你的组织,帮你实现从立项到评审、…

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制第7篇:ParameterHandler参数处理机制 1. 学习目标确认 1.0 第6篇思考题解答 在深入学习ParameterHandler参数处理机制之前,让我们先回顾并解…

[linux] 文件夹可写权限的关闭和打开

设置仅可读:chmod -R a-w <folder_path>打开写权限:chmod -R 766 <folder_path>

2025年教室护眼灯厂家权威推荐榜单:led教室灯/幼儿园教室灯/教室照明灯具源头厂家精选

随着社会对青少年视觉健康的日益关注,教室照明环境已成为学校建设的重点环节。专业的教室护眼灯不仅能有效降低学生近视发生率,还能提升学习效率。本文将基于行业调研与公开数据,对当前市场上具有代表性的教室护眼灯…

2025年自动定量灌装机厂家权威推荐榜单:称重灌装机/膏状灌装机/瓶灌装机源头厂家精选

在当今工业化进程中,自动定量灌装设备作为生产线核心环节,其技术水平直接影响企业生产效益与产品质量。随着智能制造的深入推进,灌装设备行业正经历着从机械化向数字化、智能化的重要转型。本文将基于行业数据与技术…

厨房电子秤芯片方案:SIC8833

本文介绍了采用SIC8833QFN32单片机开发的一款5KG量程,0.1g精度的厨房电子秤。该秤具备自动调零、2段自动标定功能,支持USB充电,并能进行模式和单位转换。用户可通过MODE和UNIT键在重量、水体积、牛奶体积模式以及公…

备份恢复:backup database format plus archivelog归档备份集路径与数据库format指定不一致

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。备份恢复:b…

在MCUXpresso IDE中建立使用静态库的工程 - 指南

在MCUXpresso IDE中建立使用静态库的工程 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南

本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。作者:杨兰馨(楠瑆) 背…

2025年江苏博士后微服务公司权威推荐榜单:博士后服务团/高层次人才服务/高层次人才引进源头公司精选

汇聚顶尖人才资源,构建创新驱动发展新引擎 在创新驱动发展的时代背景下,江苏省作为科技与人才高地,对博士后等高层次人才的需求日益增长。博士后微服务机构作为连接政府、企业、高校和人才的桥梁,已成为推动区域科…

RFSOC学习记录(六)混频模式分析

RFSOC学习记录(六),简要介绍混频模式以及利用xilinx官方频率规划器介绍混频​ 混频 混频器(Mixer)是RFSOC通过ip核实现在数字域的频率搬移,主要功能是在不改变采样率的情况下,把信号的频谱中心移动到目标频率附…

每周读书与学习-JMeter主要元件详细介绍(二)函数助手

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 1、函数助手 函数助手是…

Launcher 桌面源码笔记一(3D车模桌面)

Launcher 桌面源码笔记一(3D车模桌面)3D车模通过TaskView显示在Launcher,首先需要知道,为什么要用TaskView,而不是Activity,然后在说加载流程 1、surface比activity等效率更高,特别是针对车模跟地图等重量级场景…

Microsoft Visual C++ 运行库安装教程(最新版完整指南|DLL缺失修复方案)

前言 在 Windows 系统中,不论是开发软件、运行大型 3D 游戏,还是使用视频剪辑、图形处理工具,许多人都会遇到这样让人头疼的错误提示: *** 系统缺少 msvcp140.dll** *** 无法启动程序,因为丢失 vcruntime140_1.dl…

2025年BPM系统排名深度测评:5大主流厂商哪家适合你?

在数字化转型加速的商业环境中,企业对业务流程的精细化管理需求日益迫切。BPM系统(业务流程管理系统)作为优化流程、提升效率的核心工具,通过建模、自动化、监控与优化全流程,帮助企业打破信息孤岛、降低运营成本…

2025 年硫酸钡板生产厂家最新推荐排行榜:结合协会测评权威数据,揭晓实力企业高纯度/ct 室/牙科/辐射硫酸钡板公司推荐

引言 在射线防护领域,硫酸钡板的质量与性能至关重要。为给采购方提供可靠参考,本次 2025 年硫酸钡板生产厂家最新推荐排行榜,由中国辐射防护器材协会联合行业专家团队开展测评并发布。测评过程严格遵循《射线防护材…

2025 年最新推荐!软件验收测试公司最新排行榜,揭秘具备 CMA/CNAS 资质的靠谱品牌可靠/权威/知名的软件验收测试公司推荐

引言 据中国软件测评行业协会 2024 年度报告显示,国内软件验收测试机构合规率仅 68%,超三成机构因测评方法不规范导致测试结果偏差率达 15% 以上。在数字化转型加速的当下,科学的测评方法成为保障软件质量的核心。当…

Ollama大模型推理场景下3090和4090性能实测

使用Ollama的快速模型部署,来实测英伟达的RTX 3090和RTX 4090这两张显卡,在大语言模型推理场景中的性能差异。 选择 Qwen3的模型进行测试,考虑到显存都是24GB,分别选择一个FP16精度和一个Q4_K_M量化后的大模型进行…

OSI七层网络参考模型(Leo)

OSI七层网络参考模型层级 说明7. 应用层 对应用程序提供接口6. 表示层 进行数据格式的转换,以确保一个系统生成的应用层数据能够被另外一个系统的应用层所识别和理解。5. 会话层 在通信双方之间建立、管理和终止会话。…

2025 年最新推荐河道护栏源头厂家口碑榜,聚焦全流程服务与高性价比之选铝合金/绳索/不锈钢河道护栏公司推荐

引言 当前河道护栏采购市场存在诸多痛点,给项目方带来极大困扰。部分厂家仅负责生产,安装、物流等后续环节需客户自行对接,不仅增加沟通成本,还易因衔接问题导致工程延期;市场上产品质量参差不齐,劣质材料制成的…