首页 > 语言 > 关键词  > MySQL查询优化最新资讯  > 正文

一个实例讲解MySQL查询优化

2008-11-21 14:02 · 稿源:it167

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

分析问题

许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

解决问题

下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。

1.合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:

●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序

应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:

●索引中不包括一个或几个待排序的列;

●group by或order by子句中列的次序与索引的次序不一样;

●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取

在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。

还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作:

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:

以下为引用的内容:

SELECT * FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT * FROM orders WHERE order_num=1008

这样就能利用索引路径处理查询。

举报

  • 相关推荐
  • 忆联 Docker+MySQL 流控方案:打造安全高效存储底座,释放 AI 极致性能

    文章探讨了在AI时代背景下,基于Docker部署MySQL数据库的高效解决方案。通过Docker容器化技术,MySQL实现了灵活部署、资源高效利用和稳定隔离性,成为AI应用的首选数据库方案。测试结果显示,采用PCIe5.0企业级SSD配合Namespace技术和QoS优化策略,能精准控制性能偏差在2%以内,在混合读写场景下更可控制在1%以内。该方案显著提升了存储资源管理效率,为AI应用提供稳定可靠的数据存储支持,同时降低企业TCO成本,推动数据价值释放。

  • 2025 MWC 上海,IndoorLink无线讲解器在现场!

    6月18日,亚洲科技盛会MWC上海开幕。中国智能导览品牌IndoorLink携旗舰无线讲解器亮相,凭借500米超距抗干扰传输、智能多团队协作系统及全场景适配能力成为展会焦点。其搭载RangeBoost技术实现500米无障碍稳定传输,信号穿透力达普通设备2.6倍。创新智能信道管理系统支持999+无限频道和300+设备同步运行,毫秒级跳频规避干扰,确保多语种分组导览"零串频"。产品通过国际认证,已服务全球30国,在巴塞罗那MWC经5000人次极限考验。同时推出主副双讲+同声传译系统,支持12种语言实时翻译,助力跨国企业打破文化壁垒。安全方面通过本安防爆认证,成为业内首款可进入石化车间的讲解设备。这款承载30多项专利的中国声学方案,正重塑知识传播边界。

  • 罗永浩数字人直播首秀:AI讲解近10万字 效果把老罗都吓一跳

    罗永浩数字人昨日在百度直播首秀、完美收官。 罗永浩今天分享了最新感受,直呼这数字人效果把自己都吓一跳。 我和萧木的两个数字人在那儿眉来眼去,讲着跟我一样风格的段子,有点恍惚但这就是现实。” 百度方面透露,这场直播中,由AI生成的剧本式产品讲解高达9.7万字,由AI驱动的数字人动作高达8300个。 罗永浩感慨:如果没有数字人,这得把我累成啥样!”

  • 科灯跨境年中活动 免费领谷歌优化服务

    科灯跨境618大促推出三大建站优惠方案:1)WordPress/WooCommerce旗舰版和定制版建站方案赠送谷歌SEO优化服务包,帮助商家解决独立站初期流量问题;2)Shopify提供0元免费建站服务,包含主题安装、域名绑定等技术支持;3)专业团队提供7x24小时售后保障,Shopify商家还可享1年免费技术支持。活动期间价格透明,助力跨境卖家低成本搭建独立站,开启出海新征程。

  • 苹果发布iOS 26 相机应用全面优化

    在交互设计上,iOS26进一步简化了设置流程。用户无论处于何种拍摄模式,均可通过向上滑动屏幕快速调出曝光、定时器、光圈等参数调节选项;分辨率与帧率控制按钮则被整合至屏幕顶部,与闪光灯、夜间模式开关并排显示。 ​长按顶部图标还可展开详细配置菜单,满足专业用户对拍摄参数的精细调整需求。

  • 水滴信用开放平台开放支持企业大数据MCP企业信息查询场景

    水滴信用企业大数据平台拥有覆盖全国3.7亿市场主体的企业信用图谱,提供1000+维度的企业数据查询服务。其核心功能包括:工商注册、股东出资、司法诉讼、经营异常等基础信息实时更新;深度风险扫描涵盖行政处罚、股权冻结等全面监控;商业能力洞察包含知识产权、招投标等实力评估;关系网络透视可穿透至最终自然人。平台已上线火山引擎COZE插件,调用量超8000万次,支持金融风控、供应链管理、政府监管等多场景应用,通过MCP技术实现数据智能融合与深度挖掘,推动企业信息查询从静态检索升级为动态智能洞察。

  • StarRocks 优化实践:揭秘毫秒级实时分析的三大核心技术

    StarRocks是一款高性能实时分析数据库,通过三大核心技术解决海量数据分析难题:1)向量化执行引擎,采用批处理方式减少CPU开销,支持SIMD指令集加速计算;2)CBO优化器,基于统计信息智能选择最优执行计划,支持复杂查询改写和物化视图优化;3)列式存储结构,结合稀疏索引和Bitmap索引提升I/O效率。其企业级产品镜舟数据库在此基础上增强多租户隔离、RBAC权限控制等特性

  • 微云全息:基于区块链多任务学习的车联网优化技术框架,将为私家车通勤体验带来革新

    随着城市化进程加速和私家车数量激增,通勤体验成为一大挑战。微美全息公司推出基于区块链多任务学习的车联网优化技术框架,通过区块链保障数据安全与隐私,利用多任务学习算法分析车辆轨迹、交通流量等数据,精准预测用户出行需求并提供最优路线规划。该技术能有效缓解交通拥堵,提升通勤效率,同时为城市交通管理提供智能决策支持,推动交通系统向智能化、高效化方向发展。

  • iPad为何不运行macOS 苹果高管:macOS未对触摸屏做优化

    iPadOS 26带来了全新的应用视窗、下滑式菜单栏等功能,让iPad的操作体验更接近Mac,但苹果始终未让iPad运行macOS系统,其背后原因正式揭开。 苹果公司软件工程负责人Craig Federighi接受采访时称,iPadOS 26的新特性在生产力与简洁性之间取得了很好的平衡,macOS系统从未对触控屏做优化,我们要保留iPad最本质的简洁性,如果强行移植macOS,iPad将丧失其触控设备的独特价值。 Craig Fed

  • 飞猪AI“问一问”更新:升级机酒查询、手绘地图等功能 新增会员助手

    飞猪AI助手"问一问"5月26日更新多项功能:1)提升智慧交通、酒店顾问等场景的查询精准度,新增C919国产飞机票务推荐;2)推出AI角色会员助手,可查询会员权益并推荐高性价比方案;3)优化基础功能,包括搜索提示、一键生成旅行长图等;4)手绘行程地图接入真实数据,可生成带距离标注的个性化路线图。目前途牛等平台也相继布局AI旅游助手,飞猪产品负责人表示将持续迭代升级,探索AI在旅游领域的无限可能。