

SQL查詢(xún)語(yǔ)句的優(yōu)化
- 期刊名字:新鄉教育學(xué)院學(xué)報
- 文件大?。?02kb
- 論文作者:茹蓓
- 作者單位:華中科技大學(xué)
- 更新時(shí)間:2020-09-29
- 下載次數:次
第19卷。第4期新鄉教育學(xué)院學(xué)報Vol. 19,No.42006年12月JOURNAL OF XINXIANG EDUCATTON COLLECESQL查詢(xún)語(yǔ)句的優(yōu)化茹蓓(華中科技大學(xué)控制科學(xué)與工程系,湖北武漢430079)摘要:目前數據庫 面臨的主要問(wèn)題是SQL查詢(xún)語(yǔ)句的優(yōu)化,通過(guò)使用索引、提供冗余搜索參數避免相關(guān)子查詢(xún)等方法,可以有效的提高系統性能。關(guān)鍵詞:數據庫;SQL;查詢(xún)語(yǔ)句;優(yōu)化方法中圖分類(lèi)號:TP311文獻標識碼:A文章編號16723520040085-02越來(lái)越多的軟件開(kāi)發(fā)是基于數據庫進(jìn)行的,而數據庫中詢(xún)語(yǔ)句中索引項sno、cno沒(méi)有包含WHERE子句中的grade主要是使用SQL查詢(xún)語(yǔ)句來(lái)獲得信息。隨著(zhù)數據庫中數據項 ,那么就不會(huì )利用索引項來(lái)提高查詢(xún)速度??梢酝ㄟ^(guò)在的增加,查詢(xún)語(yǔ)句的優(yōu)化就成為系統需要解決的最重要的問(wèn)WHERE子句后增加' Sno IS NOT NULL'這樣的永真條件把索題?,F在很多用戶(hù)使用SQL Sever的查詢(xún)優(yōu)化器來(lái)改進(jìn)系統引項引人查詢(xún)中,形成索引覆蓋,提高執行速度。性能,”但是使用查詢(xún)優(yōu)化器并不能智能化的自動(dòng)編寫(xiě)SE-(二)提供-些冗余的搜索參數LECT語(yǔ)句,那么編寫(xiě)查詢(xún)語(yǔ)句的任務(wù)還是要由編程人員來(lái)-般支持SQL語(yǔ)言的大型關(guān)系數據庫都需要使用一個(gè)完成。在相同的查詢(xún)條件下,可以有多種不同的表示方式,基于成本的優(yōu)化器,為即時(shí)查詢(xún)提供- -個(gè)最佳的執行策略。而在數據庫中不同表達方式運行的速度是截然不同,劣質(zhì)的優(yōu)化器通過(guò)查詢(xún)語(yǔ)句提供執行策略,采用查詢(xún)策略可使系統查詢(xún)語(yǔ)句與優(yōu)化的查詢(xún)語(yǔ)句之間的速度差別甚至可以達到性能大大提高。幾十倍,所以編寫(xiě)SELECT語(yǔ)句的優(yōu)劣會(huì )直接影響系統的性在多個(gè)表連接查詢(xún)時(shí),應當提供-些冗余的搜索參 數,能。設計人員可以通過(guò)多種方法來(lái)優(yōu)化編寫(xiě)SELECT查詢(xún)語(yǔ)使優(yōu)化器有更多 的選擇余地。句,從而提高查詢(xún)速度。例如, 0] SELECT student. sudent. name, student. course.-優(yōu)化方法course . id, student_ course. grade FROM student, student _ course(一)合理設計并使用索引WHERE student. student. id= ‘g9940202' AND student. student_建立索引是加快表的查詢(xún)速度的有效手段?!?用戶(hù)可以id= student - course. student - id; SELECT student. student - name,根據情況創(chuàng )建聚集索引和組合索引。student_ course. course _ id, stodent . course. grade FROM student,聚集索引是指索引項的順序與表中記錄的物理順序一student_ counse WHERE student. student _ id =‘e9940202' AND致的索引組織。因此,在聚集索引下進(jìn)行范圍查找時(shí),根據student. student _ id = stadent - course. student _ id AND student_條件很容易就確定查找范圍的起止點(diǎn),然后只在確定的范圈course. student_ id= ‘g9940202' ;前面這兩個(gè)查詢(xún)語(yǔ)句作用是內掃描數據頁(yè)就可以完成查詢(xún)要求,避免了每次查詢(xún)都必須相同的,但是后一個(gè)提供了更大的靈活性,便于查詢(xún)。掃描表中所有的數據頁(yè),從而縮短了查詢(xún)時(shí)間。但是并不是(三)避免使用相關(guān)子查詢(xún)所有的表都適用聚簇索引,通常在下面幾種情況下建立聚簇相關(guān)子查詢(xún)是指子查詢(xún)的查詢(xún)條件依賴(lài)于外層父查詢(xún)索引:表中列數據相對穩定、變化不頻繁;使用BEIWEEN、的某個(gè)屬性值。相關(guān)子查詢(xún)的內層查詢(xún)與外層查詢(xún)有關(guān),所<.< =.>i.> =謂詞進(jìn)行范圍值的查詢(xún);頻繁使用連接或以必須反復執行,對于外層查詢(xún)的每-個(gè)元組都要進(jìn)行一遍CROUP BY子句的查詢(xún)列。內層查詢(xún)的運算并且很可能當父查詢(xún)的列值改變之后,子在多個(gè)列進(jìn)行查詢(xún)時(shí),使用組合索引可以在表中確定數查詢(xún)要重新查詢(xún)一次。這樣會(huì )導致大量的隨機磁盤(pán)U0操據排序,減少數據查詢(xún)的時(shí)間,提高查詢(xún)效率。但是使用組作,使相關(guān)查詢(xún)的效率較低,而且嵌套層次越多,效率越低。合索引時(shí)要注意必須將索引項覆蓋查詢(xún)。通??梢允褂眠B接查詢(xún)替代相關(guān)子查詢(xún);如果子查詢(xún)不可避例如,在emo, cno項上建立唯-索引, SELECT CouNT免,那么要在子有詢(xún)中過(guò)濾掉盡可能多的記錄行。(*) FROM SC WHERE grade> 60 AND grade< 90 ;在這個(gè)查中國煤化工HERE EXIST(SELECTYHCNMHG收稿日期:006-05-22作者簡(jiǎn)介:茹蓓(1977-) ,女,河南新鄉人,華中科技大學(xué)系統工程專(zhuān)業(yè)2006 級在讀碩士研究生,平原大學(xué)信息工程學(xué)院講師。研究方向:軟件設計。8:新鄉教育學(xué)院學(xué)報2006年* FROM SC WHERE student. smo= SC. smo);可以改為連接查60;這樣,查詢(xún)可以正常進(jìn)行優(yōu)化。詢(xún)SELECT sname FROM student, SC WHERE sudent. sno= SC.(七)避免通配符“%”或“-"在LIKE謂詞匹配串的首位sno;這樣,可以省去掃描很多數據記錄行。出現(四)避免使用不兼容的數據類(lèi)型通配符“%”或"."出現在查詢(xún)的匹配串首位時(shí),系統不在查詢(xún)語(yǔ)句的WHERE子句中出現的float.int.char和使用索引,這樣就會(huì )降低sQL語(yǔ)句的執行速度。但是,當通varchar 型是不兼容的,數據類(lèi)型的不兼容可能使優(yōu)化器無(wú)法配符出 現在匹配串的其他位置時(shí),優(yōu)化器就可以利用索引提執行一些本來(lái)可以進(jìn)行的優(yōu)化操作。商執行速度。例如, SELECT sno, sname FROM student WHERE sage> 18;例如, SELECT sname FROM student WHERE sname LIKE在student表中, sage字段是字符型,而18是整型數,優(yōu)化器‘%洋 ';的執行速度就不如SELECT sname FROM student無(wú)法對其進(jìn)行優(yōu)化,DBMS要先將18轉化為字符型后才能與WHERE sname LIKE‘劉%洋’;的執行速度。sage字段比較。編程時(shí),應將18轉化成字符型的表示,即.(八)避免順序存取“SELECT sno, sname FROM student WHERE sage>‘18'"。在嵌套查詢(xún)中,對表的順序存取對查詢(xún)效率可能產(chǎn)生致(五)避免使用“<>”或“! =”或“NOrT這樣的運算符命的影響。(I可以對連接的列進(jìn)行索引,還可以使用并集“< >”是排斥性的操作符,不是包括性的操作符(1) ,這(UNON)來(lái)避免順序存取。會(huì )使系統只能直接搜索表中數據,無(wú)法使用索引來(lái)確定將要例如,SELECT sno, sname FROM student WHERE (sage> 19命中的行數,從而降低操作速度。AND sdept= 'IS') OR sdep=‘CS' ;雖然有列的索引,但是系統例如, SELECT smo FROM student WHERE sage< > '20';還是順序掃描整個(gè)表,所以要改進(jìn)查詢(xún)速度就要分離行的集SELECT smo FROM student WHERE sage! = '20' ;這兩個(gè)查詢(xún)合,使用UNION。我們可以將上句改為:“SELECT sno, sname執行時(shí),不能使用索引,可以將上兩句改為SELECT sno FROMFROM student WHERE (sage> 19 AND sdept= 'IS') UNION SE-student WHERE soge< °20' OR sage> *20' ;這樣查詢(xún)執行時(shí),LECT sno,snamne FROM student WHERE sdept=‘CS'"。就可以利用索引縮小范圍,提高速度。二、結束語(yǔ)與“<>"、“! ="類(lèi)似,"“NOT* 謂詞是查詢(xún)中的否定形SQL查詢(xún)語(yǔ)句的優(yōu)化是在保證查詢(xún)結果正確的前提下,式,“NOT"使用時(shí),對應要否定的內容用括號括起來(lái),NOT謂通過(guò)使用優(yōu)化器、充分利用索引、減少表的掃描UO次數、減詞放在括號的前面,在查詢(xún)時(shí)先運算括號中的內容,然后運少數據轉換的進(jìn)行、減少傳送數據量等方法提高系統性能。行外面的NOT運算。那么這種運算也不能完成優(yōu)化的任務(wù),所以在編程時(shí)盡量避免使用“NOT”操作符。參考文獻:(六)避免在WHERE子句的條件參數中使用函數或數學(xué)運算符[1]微軟公司.數據庫程序設計[M].北京:高等教育出版社,WHERE子句中的條件表達式是為查詢(xún)提供判斷依據2004:485.的。如果條件表達式包含了字符串函數或數學(xué)操作符,那么[2]王 珊,陳紅.數據庫系統原理教程[ M].北京:清華大優(yōu)化器就不能使用分布系統統計信息,這樣也會(huì )影響查詢(xún)速學(xué)出版社,2002:71.度。[3]朱如龍sQL Server 數據庫應用系統開(kāi)發(fā)技術(shù)[M].北京:例如,①SELECT smo FROM student WHERE SUB2STRING機械工業(yè)出版社,2004:141.(snane,1,1)=‘劉' ;②SELECT sno FROM SC WHERE gade/10[4]高天迎. SQL語(yǔ)句的優(yōu)化[J].天津理工學(xué)院學(xué)報,2003,> 6;這兩個(gè)查詢(xún)語(yǔ)句都不能進(jìn)行優(yōu)化,可以在相同查詢(xún)要求(3).下將這兩個(gè)語(yǔ)句改為:①ELECT smo FROM student WHEREsname LIKE劉% ' ;②SELECT sno FROM SC WHERE grade >[責任編校郭濤]Optimization Methods of SQL Query LanguageRU Bei(Huazhong University of Science and Technology , Wuhan 430079 ,China)Abstract:At the present time ,SQL optimization is the mai中國煤化rticle itoduee eandanalyses some methods to optimize the SQL, which include propeFlata, avoiding fomaltranformation, etc. These methods can improve the eficiency of sTYHCNMHGKey words: database; SQL; query language; optimization methods防數據
-
C4烯烴制丙烯催化劑 2020-09-29
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-09-29
-
生物質(zhì)能的應用工程 2020-09-29
-
我國甲醇工業(yè)現狀 2020-09-29
-
JB/T 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規程 2020-09-29
-
石油化工設備腐蝕與防護參考書(shū)十本免費下載,絕版珍藏 2020-09-29
-
四噴嘴水煤漿氣化爐工業(yè)應用情況簡(jiǎn)介 2020-09-29
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-29
-
甲醇制芳烴研究進(jìn)展 2020-09-29
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進(jìn)展 2020-09-29