针对SQL SELECT语句进行性能调优是一个非常耗时的工作,可以说任何一个工程都不具备足够的时限让我们来完成这项工作,因此从日常的编写和测试过程中总结技巧,是当前优化性能的主要措施。那么有哪些较为快捷的技巧呢?
第一,整理数据集大小
当库表中仅有几千行数据时,查询指令总是可以顺利执行,但是当应用程度增加,库表容量也增加时,查询速度自然会降低不少,面对这种情况,我们可采取的解决办法其实十分简单,首先检查SELECT语句中用到的表是否可以应用WHERE子句进行过滤,然后我们的查询语句带有子查询时,一定要将其进行过滤,而且过滤时针对的是内部语句而不是外部语句。
第二,限定选择需要的字段
使用带有报告和分析功能的应用程序时,有时报告性能低是因为报告工具必须对收到的、带有详细形式的数据做聚合操作。
偶尔查询也可能运行地足够快,但你的问题可能是一个网络相关的问题,因为大量的详细数据通过网络发送到报告服务器。
当使用一个面向列的DBMS时,只有你选择的列会从磁盘读取。在你的查询中包含的列越少,IO开销就越小。
第三,解除不必要的字段
编写SQL语句是一个过程,通常需要大量编写和测试SQL语句的迭代过程。开发过程中,一些同学常常会手动加入一些额外的表,这些表对于返回SQL代码没有直接的影响,往往在大家跑完代码并获得想要的结果后忽略了之前加入的这些表和字段。这就好像手机中的照片,一张两张虚影照片并不会怎样,但是它仍旧占据了我们的内存,因此每次运行完程序,我都建议大家删除那些对最终的返回数据没有任何影响和作用的表,通过移除与那些不必要表的JOINS操作,我们可以减少大量数据库必须执行的流程。
第四,移除外部连接查询
当然这个方法并不像说起来这么简单,能不能采用这种方法完全取决于它所带来的影响有多大,即会改变多少表的内容。当影响不大时,具体可以这样操作,在相邻表中借助占位符进行OUTER JOINS删除操作,比如当你有以下的库表时,可通过定义OUTER JOINS来确保返回所有的数据:
那么,在customer表的行中增加一个占位符,并更新sales表中的所有NULL值到占位符就可以有效删除OUTER JOINS,不仅如此,还能避免其他开发人员编写额外的语句。
第五,删除JOIN和WHERE子句中的计算字段
同样,与上述方法相对应的是,删除join等字段也要根据其可能带来的调整大小来判断,我们可以将连接语句中用到的计算字段作为一个新字段在表中创建。比如下面的SQL语句:
在sales表中利用年和月增加一列,同样可以提高性能。更新后的SQL语句将如下:
以上内容均来自论文发表,转载请注明,谢谢。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!