SQL查詢思路優(yōu)化與語句優(yōu)化
- 期刊名字:科教文匯
- 文件大?。?03kb
- 論文作者:林麗貞
- 作者單位:廣州市輕工高級技工學(xué)校
- 更新時間:2020-09-29
- 下載次數(shù):次
201205(下旬刊)SQL查詢思路優(yōu)化與語句優(yōu)化林麗貞(廣州市輕工高級技工學(xué)校廣東.廣州510220)中圖分類號:TP393.09文獻標(biāo)識碼:A文章編號:1672- -7894(2012)15- 0079- -02摘要數(shù)據(jù)庫查詢優(yōu)化是取得良好執(zhí)行性能并簡化管理2.1創(chuàng)建索引的關(guān)鍵因素,SQL查詢是一個有序的查詢,不同語句的使用在關(guān)系數(shù)據(jù)庫系統(tǒng)的表上建立合適的索引,可以避免和使用順序?qū)⒅苯佑绊懫洳樵兯俣?。查詢速度的快慢直接表掃描并減少因查詢而造成的I0開銷,極大地提高了查詢影響著數(shù)據(jù)庫的推廣與應(yīng)用,本文就優(yōu)化思路及語句書寫的執(zhí)行速度。索引一般分聚集索引和非聚集索引兩種,-個優(yōu)化兩方面進行討論,提出優(yōu)化方法及語句實現(xiàn)。表可以有多個非聚集索引,但只能有一個聚集索引。索引雖關(guān)鍵詞SQL 查詢思路優(yōu)化 語句優(yōu)化有助于提高性能,但并不是索引越多越好,恰好相反,過多The Approach and Statements of Optimization in SQL的索引會導(dǎo)致系統(tǒng)低效,因為用戶在表中增加-一個索引,維Inquiry // Lin Lizhen護索引集合就要做相應(yīng)的工作,同時每次有數(shù)據(jù)改變的時Abstract Database inquiry optimization is a key factor to ach-候就需要維護索引。ieve good execution performance and simplify management.SQL常用方法是對于主鍵列、經(jīng)常有范圍查找和orderby或inquiry is an ordered inquiry. The use of different statements.group by的列可以考慮建立索引。具體的實現(xiàn)可以參考如下and sequential order will directly affect the inquiry speed,whi-表ch has a direct impact on the promotion and application of the列的特征描述聚集索引非聚集索引database.The article focuses on two aspects of the study,the ap-主鍵列應(yīng)該使用proach and statements made in optimization,which puts forward外鍵列the methods of optimization and statements to achieve.Key words SQL inquiry;the a pproach of optimization;the頻繁更新的列不應(yīng)該使用statements of optimization大數(shù)目的不同值A(chǔ)uthor's address Guangzhou Senior Light Industry Technical小數(shù)目的不同值School,510220,Guangzhou,Guangdong,China一個或極少不同值不應(yīng)該使用不應(yīng)該使用1引言經(jīng)常要求返回某范圍內(nèi)的數(shù)據(jù)隨著IT技術(shù)高速發(fā)展,互聯(lián)網(wǎng)已滲透至千家萬戶的今列經(jīng)常被分組的排序天,數(shù)據(jù)庫作為信息管理系統(tǒng)的后臺,廣泛應(yīng)用于各企事業(yè)2.2 SQL語句書寫的優(yōu)化單位,主要負責(zé)信息的處理和存儲,有著舉足輕重的地位。用戶提交- -條SQL語句,系統(tǒng)進行四步操作,從SQL執(zhí)數(shù)據(jù)庫設(shè)計的重要標(biāo)準(zhǔn)之一就是查詢速度, 查詢速度的快行的原理分析,要想提高SQL語句的執(zhí)行效率,必須SQL語慢直接影響著數(shù)據(jù)庫的推廣與應(yīng)用。而SELECT語句作為句書寫規(guī)范和技巧。SQL語句的優(yōu)化原則是盡可能減少查SQL中的核心,具有非常豐富的成分和強大的查詢功能,也詢中參與加工的數(shù)據(jù)量,以此達到優(yōu)化空間和時間。如何找是使用最為頻繁的語句之一- 。據(jù)統(tǒng)計,約有90%的系統(tǒng)性能出一個與之等價的且占用資源更少的表達式是教學(xué)select問題是由于程序員或用戶使用了不恰當(dāng)?shù)牟樵冋Z句造成語句的關(guān)鍵。以下筆者從4個方面探討語句優(yōu)化:的,所以優(yōu)化數(shù)據(jù)庫系統(tǒng)的SQL查詢語句就顯得非常重要。2.2.1盡量使用單表操作本文以教學(xué)管理系統(tǒng)為例,就查詢思路優(yōu)化及語句書寫優(yōu)在查詢過程中能在-一個表中找到的字段,盡量使用單化方面進行探討。表,不應(yīng)該涉及多表連接查詢。因為多表連接查詢,勢必要教學(xué)管理系統(tǒng)的三個關(guān)系模式為:做笛卡兒積操作,所以會增加檢索的時間。例如,查詢學(xué)號stud(sno, sname , ssex, sprof , sbithday );為“1001”學(xué)生選修的課程成績,可以書寫成“Select sno,scoreclass(cno,cname,credit);from stud,sc where stud. sno=sc. sno and sno=' 1001'”,但此sc(sno,cno,score)。查詢中涉及sno(學(xué)號)和secope(成績)兩個字段,在sc表中2 SQL查詢思路優(yōu)化都有,所以SQL中國煤化工from sc where查詢優(yōu)化關(guān)注的問題是怎樣省空間、省時、提高效率,sno=' 1001'”。YHCNM HG優(yōu)化SQLServer性能的方法很多,可以從語句書寫、創(chuàng)建索2.2.2盡量列出查詢字段名引等方面考慮,但提高速度最快的方法就是索引。在查詢過程中,每減少提取一個字段,查詢速度就會有種敏文i6 79.201205(下旬刊)相應(yīng)的提升,所以查詢時要精確寫出每個屬性,全屬性也不索引掃描。在實際應(yīng)用中可以根據(jù)情況使用大于或小于表例外,即避免書寫“select * from’這樣的語句。達式來實現(xiàn)不等條件。例:查詢成績不等80分的學(xué)號,姓2.2.3盡量減少格式轉(zhuǎn)換和函數(shù)應(yīng)用名,課程號,成績的語句為“selet A.學(xué)號,姓名,課程號,成績查詢時如果非格式轉(zhuǎn)換不可的話,那么在語句書寫時from選課表A,學(xué)生表B whereA. 學(xué)號=B.學(xué)號and成績也要盡量減少格式轉(zhuǎn)換次數(shù)。例,在stud中設(shè)置sbithday為<>80”,可以用語句“elect A.學(xué)號,姓名,課程號,成績from選字符型數(shù)據(jù),現(xiàn)需查詢1997到1999年出生的學(xué)生信息。課表A,學(xué)生表B where A.學(xué)號=B.學(xué)號and (成績<80 or成語句1:select sno,sname,ssex,sprof,sbirthday from stud績>80)”代替前-句。where cast (bithday as datetime) between 1997-01-01' and2)exists與in的使用'1999-12-31'in語句相當(dāng)于hash連接,性能低于任何連接查詢語句;語句2: select sno,name,sex.sprof,sbirthday from studexists 則是對外表作lop循環(huán),每次lop循環(huán)再對內(nèi)表進行where sbirthday between cast (1997-01-01 as datetime) an查詢。當(dāng)查詢的兩個表大小相當(dāng)時,in與exists執(zhí)行效率相cast(1999-12-31' as datetime)當(dāng);如果目標(biāo)表記錄明顯少于子查詢表記錄,則用exists較在語句1中需要對stud表中每--行記錄的日期都轉(zhuǎn)換優(yōu)用in。一次,而在語句2中只需要對常量'1997-01-01'、3)用union代替or條件1999-12- 31'做格式轉(zhuǎn)換,所以語句2執(zhí)行的速度要快于語如果在學(xué)生表中,性別與專業(yè)兩上字段創(chuàng)建索引,那么句1。使"“elect * from學(xué)生表where 性別='男'or專業(yè)='計算機同時,盡量避免在where字句左側(cè)出現(xiàn)函數(shù)表達式或運”進行查詢,只能全表掃描,達不到查詢優(yōu)化,這時可以采用算表達式,因為此種情況只能在語句執(zhí)行過程中進行全表掃“select * from學(xué)生表where 性別='男' union select * from學(xué)描,并且需對目標(biāo)表逐個記錄執(zhí)行函數(shù)或運算,極消耗性生表where 專業(yè)='計算機”,提高查詢效率。能。4)子查詢的轉(zhuǎn)換2.2.4多表查詢優(yōu)化策略及優(yōu)化書寫一個列同時在主查詢和WHERE子句中的查詢中出(1 )使用內(nèi)連接多表查詢中,如果完成相同任務(wù)時,既可以使用內(nèi)連接現(xiàn),那么當(dāng)主查詢中的列的值發(fā)生變化后,子查詢必須重新也可以使用外連接,那一定要使用內(nèi)連接,因為內(nèi)接連的效查詢一次。子查詢嵌套層數(shù)越多,查詢效率越低,這種情況率明顯高于外連接。例,查詢教學(xué)管理系統(tǒng)中學(xué)生選修課程可以采用內(nèi)嵌視圖的方式或連接查詢方式提高查詢效率。例:查詢成績70以上學(xué)生的姓名,可以將查詢語句“se-的信息,可以完成此功能的語句有:lect 姓名from學(xué)生表where 學(xué)號in (selet 學(xué)號from 選課表語句1:select A.學(xué)號,姓名,C.課程號,課程名,成績from課程表where 成績>=70)’改為“selet姓名from (select學(xué)號from 選C inner join選課表B on B.課程號=C.課程號inner join學(xué)生課表where成績>=70)A ,學(xué)生表B where A.學(xué)號=B.學(xué)號”,或改為“select姓名from 學(xué)生表A,選課表B where A.學(xué)號表AonA.學(xué)號=B.學(xué)號=B.學(xué)號and成績>=70"。語句2:3總結(jié)C left join選課表B on B.課程號=C.課程號left join學(xué)生表A程序設(shè)計中有80-20的原則,即20%的代碼消耗了onA.學(xué)號=B.學(xué)號80%的資源,這個原則同樣適用于數(shù)據(jù)庫查詢語句,因此數(shù)其中,語句1是較優(yōu)選擇,其采用內(nèi)接連,執(zhí)行效率最據(jù)庫查詢的主要優(yōu)化目標(biāo)是找到并優(yōu)化這20%的代碼。優(yōu)高。化查詢的方法很多,在使用中,要根據(jù)具體情況權(quán)衡利弊,(2 )where與having的應(yīng)用使數(shù)據(jù)庫查詢性能最優(yōu)。在教學(xué)中要培養(yǎng)學(xué)生根據(jù)具體的on與where、having均可以加條件,但on最先執(zhí)行,情況具體分析的能力,同時要讓學(xué)生養(yǎng)成編寫規(guī)范、優(yōu)化的where次之,having最后。語句書寫時盡量使用where代替SQL語句的習(xí)慣。having, 且做到先篩選后連接,選擇記錄條數(shù)最少的表作為基礎(chǔ)表,當(dāng)SQL處理多個表時,會運用排序及合并的方式連參考文獻接它們。首先掃描第- -個表(FROM 子句中最后的那個表)并[1]馬軍,李玉林.SQL語言與數(shù)據(jù)操作技術(shù)大全[M].北京:電子工業(yè)對記錄進行排序,然后掃描第二個表(FROM子句中最后第出版社,2008.二個表),最后把從第二個表中檢索出的記錄與第-一個表中2]景慎德SOL查詢優(yōu)化的策略與技巧J],福建電腦2009(10).匹配記錄進行合并。假設(shè)學(xué)生表記錄少,選課表記錄多,現(xiàn)[3] 雷琳武漢船舶職業(yè)技術(shù)學(xué)院學(xué)報2011(3).需查詢出男生的總分,最優(yōu)化實現(xiàn)語句為:[4]魏琦,于林林,宋旭東.關(guān)系數(shù)據(jù)庫查詢優(yōu)化策略研究[J].電腦知識select性別,sum (成績) as總分from選課表A,學(xué)生表B與技術(shù),2010(6).where性別='男'and A.學(xué)號=B.學(xué)號group by性別[5]徐麗媛,張亞賓基于SOL Server 數(shù)據(jù)庫查詢優(yōu)化的幾點思考[].(3)條件應(yīng)用優(yōu)化科技信息中國煤化工1)避免使用'=’與‘<>'操作符6]馬李明,王I YHCNMH G高數(shù)據(jù)查詢中的應(yīng)在查詢條件表達式中應(yīng)盡量避免使用不等查詢條件,用[J]電腦知出與技術(shù),2008(20).為不等查詢條件只能通過全表掃描來實現(xiàn),無法使用任何編輯胡俊龍80種敵文i6 ..
-
C4烯烴制丙烯催化劑 2020-09-29
-
煤基聚乙醇酸技術(shù)進展 2020-09-29
-
生物質(zhì)能的應(yīng)用工程 2020-09-29
-
我國甲醇工業(yè)現(xiàn)狀 2020-09-29
-
石油化工設(shè)備腐蝕與防護參考書十本免費下載,絕版珍藏 2020-09-29
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡介 2020-09-29
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-29
-
甲醇制芳烴研究進展 2020-09-29
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進展 2020-09-29


