选择显示字体大小

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

  在数据库编程中,管理人员需要经常从数据库中查询数据。当查询条件为确定时,我们可以明确用的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;

  4.select * from employee where sex=b and age=c;

  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 <> "" then
str_result="where name =a"
end if
if b <> "" then
if str_result="" then
str_result="where sex=b"
else
str_result=str_result+"and sex = b"
end if
end if
if c <> "" then
if str_result="" then
str_result="where age =c"
else
str_result=str_result+"and age=c"
end if
end if

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

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

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons