多条件数据库查询的优化方法

2016-02-19 17:21 3 1 收藏

今天图老师小编要跟大家分享多条件数据库查询的优化方法,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  在数据库编程中,管理人员需要经常从数据库中查询数据。当查询条件为确定时,我们可以明确用的SQL语句来实现,但是当查询条件为多个条件的动态组合时,查询语句会由于分支太多及IF语句的多重嵌套而变得相当复杂。在此,笔者提供了一种优化方法,运用本方法可以有效地减少查询语句的分支和数量以及IF条件语句的嵌套层数,从而提高程序的运行效率。

  下面我们以一个简单的例子来说明,假设有一个名为employee的表,现在我们要从其中查询数据,条件有三个,由用户动态选择,如图1所示:

  其中条件A、B、C之间是与的关系,A、B、C均为动态选择,可以取其中的一个、两个或三个,也可以一个都不选,当三个条件都不选择时则认为是无条件查询,按照通常的做法,判断方法如图2所示:

  这样,最终的结果有8个,即有8条查询语句,分别是

  1.select * from employee;

  2.select * from employee where Age =C ;

  3.select * from employee where Sex=B;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  4.select * from employee where Sex=B and Age=C;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  5.select * from employee where Name=A;

  6.select * from employee where Name=A and Age=C;

  7.select * from employee where Name=A and Sex=B ;

  8.select * from employee where Name=A and Sex=B and Age=C;

  显然这是比较烦琐的,而且用到了多重嵌套IF语句,因而在条件增多时,其复杂程度将大大增加。我们对它进行优化,方法如下:

  首先定义一个字符串Str_Result用来存放组合条件的结果,开始时为空。

  用程序语言描述如下:

  

if A  "" thenStr_Result="where Name =A"end ifif B  "" thenif Str_Result="" thenStr_Result="where Sex=B"elseStr_Result=Str_Result+"and Sex = B"end ifend ifif C  "" thenif Str_Result="" thenStr_Result="where Age =C"elseStr_Result=Str_Result+"and Age=C"end ifend if

  最终的结果查询语句为:select * from employee + Str_Result。

  显然,这种方法减少了组合的分支和if语句的多重嵌套,从而提高了程序的效率。

  本方法的原理在于定义了一个单独的字符串来表示组合的结果,当该字符串经过条件A后其值为A的条件,经过条件B后其值则为条件A与B 组合的结果,而当经过条件C后其值则变成条件A、B、C的组合,从而减少了组合判断的分支,对于更多条件的组合,其效能将更加明显。

来源:http://www.tulaoshi.com/n/20160219/1615003.html

延伸阅读
海量数据库的查询优化及分页算法方案  原出处不详 摘自:www.21php.com 随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量。...
标签: 服务器
如何优化Urchin配置文件数据库的磁盘空间 Urchin 的报告数据存储在各个配置文件所独有的每月数据库中(注:Urchin分析后的数据是按月归档),这些数据库一般位于 Urchin 的 data/reports 目录下。每个配置经过处理的数据库大小为原日志大小的5% 至10%。 默认情况下,Urchin 会保留每月的这些配置文件数据库,但经过长时间的数据积...
标签: PHP
数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。 从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量...
How to speed up database access Here is a trick to loop through a recordset faster. Often when looping through a recordset people will use the following code: Do While Not Records.EOF   Combo1.AddItem Records![Full Name]   Eecords.Movenext LoopThe problem is that everytime the database moves to the next re...
1. 估算查询性能 在大多数情况下,可以通过统计磁盘搜索次数来估算查询的性能。对小表来说,通常情况下只需要搜索一次磁盘就能找到对应的记录(因为索引可能已经缓存起来了)。对大表来说,大致可以这么估算,它使用B树做索引,想要找到一条记录大概需要搜索的次数为:log(row_count) / log(index_block_length / 3 * 2 / (index_length...

经验教程

613

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部