7.使用表值(table-valued)函数而非标量(scalar)函数由于标量函数可以将计算封装到类似存储过程的SQL代码段中,因此开发人员的通常做法是:将标量函数的结果作为SELECT查询中的某一列去返回 。不过 , 您可以使用表值函数来进行代替,并在查询中使用CROSS AppLY来获得更好的性能 。
8.使用分区以避免大量数据移动SQL Server Enterprise提供了一种“分区(partitioning)”功能 , 可以将数据库表分割成多个分区 。也就是说,如果你有一张表需要经常归档到另一个表中,那么就可以避免使用INSERT/DELETE来移动数据,而直接使用SWITCH来代替 。
我们可以假想一个场景,如果有一张表需要每天都被清空至一张归档表中 。那么,我们就可以使用SWITCH,简单地将日常表中的页面 , 分配到该归档表中,从而执行清空和复制操作 。与手动复制和删除相比,该切换过程所需的时间要少得多 。Cathrine Wilhelmsen提供了如何以这种方式使用分区的精彩教程 , 您可以通过链接--https://www.cathrinewilhelmsen.NET/table-partitioning-in-sql-server-partition-switching/,进行参考 。
9.使用存储过程提高性能,使用ORM带来便利ORMs,即:对象关系映射器(object-relational mappers)是一套能以编程的方式生成SQL代码的软件工具包 。它们允许您使用应用程序的编程语言及其隐喻(Metaphors),来开发和维护查询 。
由于ORM可能产生低效、有时甚至无法被代码优化 , 而备受诟病 。同时,它们也会降低开发人员学习SQL、以及理解查询内容的积极性 。许多数据库开发人员原则上并不喜欢ORM,他们在需要通过手动编写查询 , 以获得最佳性能时,往往无所适从 。
相反,对于经常被调用、需要良好性能、不常被更改、以及需要数据库分析工具对性能进行检测的查询而言,使用存储过程是最为合理的 。与临时查询相比,大多数数据库更容易获得存储过程的汇总统计信息 。数据库的查询规划器也更容易对存储过程进行优化 。
不过,将更多的数据库逻辑移入存储过程的缺点是:逻辑与数据库的耦合更加紧密 。存储过程可能会从性能优势变为巨大的技术债(Technical Debt) 。如果您后续准备迁移到另一种数据库技术的话,那么更改ORM的目标会比重写所有存储过程要容易得多 。毕竟应用程序的数据库部分的编写方式 , 与应用逻辑的耦合度不高 。相反,ORM倒是能够使得编写和维护数据库代码更加容易 。此外 , 我们可以检查由ORM生成的代码,以进行优化 , 而且查询缓存也能够允许我们重用那些最常被生成的查询 。
总之,如果您觉得应用程序端的可维护性更重要的话,那就请使用ORM;如果您需要在数据库方面具有更好的性能的话 , 则请使用存储过程 。
译者介绍陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验 。
原文标题:SQL unleashed: 9 ways to speed up your SQL queries,作者:Serdar Yegulalp
【加快SQL查询的九种优秀实践】
推荐阅读
- MyCat分库分表实时同步到GreatSQL
- 我们一起聊聊MySQL 索引的底层逻辑
- 数九2023从哪一天开始到哪一天结束 2023年数九时间表查询
- mysql如何删除表 mysql如何删除表中一列
- 如何查水电费账单,高层住宅如何查询水费
- 我们一起聊聊K8s定时备份MySQL并发送到指定邮箱
- 说一下MySQL主从复制的原理?
- 支付宝怎么查询登录手机号,支付宝怎么查看完整银行卡卡号
- MySQL 记录、页、索引的数据结构简析
- 使用 Python 连接 SQL Server 数据库并实时读取数据?
