成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當(dāng)前位置:首頁>>開發(fā)編程>>數(shù)據(jù)庫>>新聞內(nèi)容
多條件數(shù)據(jù)庫查詢的優(yōu)化方法
作者:李軍勝 發(fā)布時(shí)間:2004-10-4 9:29:49 文章來源:電腦報(bào)

  在數(shù)據(jù)庫編程中,管理人員需要經(jīng)常從數(shù)據(jù)庫中查詢數(shù)據(jù)。當(dāng)查詢條件為確定時(shí),我們可以明確用的SQL語句來實(shí)現(xiàn),但是當(dāng)查詢條件為多個(gè)條件的動態(tài)組合時(shí),查詢語句會由于分支太多及IF語句的多重嵌套而變得相當(dāng)復(fù)雜。在此,筆者提供了一種優(yōu)化方法,運(yùn)用本方法可以有效地減少查詢語句的分支和數(shù)量以及IF條件語句的嵌套層數(shù),從而提高程序的運(yùn)行效率。

  下面我們以一個(gè)簡單的例子來說明,假設(shè)有一個(gè)名為employee的表,現(xiàn)在我們要從其中查詢數(shù)據(jù),條件有三個(gè),由用戶動態(tài)選擇,如圖1所示:

  其中條件A、B、C之間是與的關(guān)系,A、B、C均為動態(tài)選擇,可以取其中的一個(gè)、兩個(gè)或三個(gè),也可以一個(gè)都不選,當(dāng)三個(gè)條件都不選擇時(shí)則認(rèn)為是無條件查詢,按照通常的做法,判斷方法如圖2所示:

  這樣,最終的結(jié)果有8個(gè),即有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語句,因而在條件增多時(shí),其復(fù)雜程度將大大增加。我們對它進(jìn)行優(yōu)化,方法如下:

  首先定義一個(gè)字符串Str_Result用來存放組合條件的結(jié)果,開始時(shí)為空。

  用程序語言描述如下:

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

  最終的結(jié)果查詢語句為:select * from employee + Str_Result。

  顯然,這種方法減少了組合的分支和if語句的多重嵌套,從而提高了程序的效率。

  本方法的原理在于定義了一個(gè)單獨(dú)的字符串來表示組合的結(jié)果,當(dāng)該字符串經(jīng)過條件A后其值為A的條件,經(jīng)過條件B后其值則為條件A與B 組合的結(jié)果,而當(dāng)經(jīng)過條件C后其值則變成條件A、B、C的組合,從而減少了組合判斷的分支,對于更多條件的組合,其效能將更加明顯。



最新更新
·SQL Server 2005刪除用戶失敗
·SQL Server中刪除重復(fù)數(shù)據(jù)的
·經(jīng)典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數(shù)據(jù)庫版本的方
·SQL Server 2005 Express 遠(yuǎn)
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數(shù)據(jù)庫連接超時(shí)問
·清除SQL Server日志的兩種方
相關(guān)信息
·三種查看MySQL數(shù)據(jù)庫版本的方法
·2008主流數(shù)據(jù)庫產(chǎn)品回顧與展望
·Berkeley DB數(shù)據(jù)庫是什么數(shù)據(jù)庫?
·SQLite數(shù)據(jù)庫是中小站點(diǎn)CMS的最佳選擇
·mysql2000和sql2000數(shù)據(jù)庫的區(qū)別
·批處理也能自動備份數(shù)據(jù)庫
·用SQL語句建立索引的示例
·數(shù)據(jù)備份中可能出錯(cuò)的情況及解決辦法
·純真IP數(shù)據(jù)庫格式詳解
·Pocket PC數(shù)據(jù)類型映射表
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯(cuò)
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時(shí)代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實(shí)很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個(gè)傳說
丟了幸福的豬
找個(gè)人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因?yàn)榧拍畔肽?/a>
愛上你等于愛上了錯(cuò)
在心里從此永遠(yuǎn)有個(gè)你
一個(gè)人的寂寞兩個(gè)人的錯(cuò)
主站蜘蛛池模板: 札达县| 门源| 兴仁县| 达州市| 会东县| 梧州市| 辉县市| 本溪| 许昌县| 岑巩县| 金华市| 长沙县| 正阳县| 兴仁县| 洞头县| 松滋市| 双流县| 黄平县| 确山县| 新沂市| 井冈山市| 永安市| 太白县| 通榆县| 那曲县| 桦川县| 阳西县| 池州市| 华蓥市| 顺义区| 朝阳市| 临邑县| 田阳县| 忻城县| 澄城县| 淳安县| 禄丰县| 赣榆县| 钦州市| 库车县| 洞口县|