日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

關(guān)系數(shù)據(jù)庫SQL查詢語句的優(yōu)化

 zww_blog 2014-04-11
 

———《數(shù)據(jù)庫原理與應(yīng)用》課程教學(xué)研究
 

摘要:優(yōu)化查詢有助于提高SQL的檢索速度,是一種提高應(yīng)用系統(tǒng)性能的重要方式。對SQL查詢的優(yōu)化方案主要從優(yōu)化原理、視圖、WHERE 子句、存儲過程等,并結(jié)合實例闡明和驗證。對優(yōu)化查詢的掌握,可使學(xué)生在數(shù)據(jù)庫應(yīng)用程序設(shè)計方面的課程中更能得心應(yīng)手。
關(guān)鍵字:優(yōu)化查詢;SQL查詢;關(guān)系數(shù)據(jù)庫
        數(shù)據(jù)庫查詢操作是數(shù)據(jù)庫操作的核心操作,對數(shù)據(jù)的查詢效率及處理速度已成為衡量數(shù)據(jù)庫性能的一個重要指標(biāo)。數(shù)據(jù)庫查詢技術(shù)也是學(xué)生對《數(shù)據(jù)庫原理與應(yīng)用》這門課程所必須掌握的知識和技能,數(shù)據(jù)庫查詢技術(shù)的精通也為以后課程的學(xué)習(xí)(如:C#.NET程序設(shè)計)中的數(shù)據(jù)庫應(yīng)用程序的設(shè)計打下良好的基礎(chǔ)。為了優(yōu)化數(shù)據(jù)庫的性能,簡單、有效的方法就是優(yōu)化查詢。
        1優(yōu)化原理和實質(zhì)數(shù)據(jù)查詢處理的代價通常取決于對磁盤的訪問,因為磁盤比內(nèi)存的訪問速度要慢。對于一個給定的查詢,有許多可能的處理策略,復(fù)雜查詢更是如此[1]。查詢優(yōu)化的實質(zhì)是在結(jié)果正確的前提下,找出與已有表達式等價,但查詢效率更高的表達式。
        2在教學(xué)中要注重的幾種典型的優(yōu)化方法
        2.1 建立視圖
        視圖可簡化用戶操作數(shù)據(jù)的方式,使用戶能著重于所感興趣的特定數(shù)據(jù)和所負(fù)責(zé)的特定任務(wù)。如果該視圖數(shù)據(jù)規(guī)模小于定義的基本表,則基于視圖的查詢比原查詢的速會快得多。例:要查詢每門課程成績最高的學(xué)生的學(xué)號SELECT 學(xué)號,課程號,成績FROM 成績表AWHERE 成績=(SELECT MAX(成績)FROM 成績表BWHERE A..課程號=B.課程號)語句缺點:這屬嵌套查詢,子查詢的結(jié)果集將作為外層查詢的條件,查詢效率不高。解決方案:可先建立視圖,求得每門課程的最高分,再與成績表中比較,獲取與視圖中最高分?jǐn)?shù)據(jù)相等的記錄,這就減少了內(nèi)層連接的數(shù)據(jù)量,從而提高了檢索速度。用SQL語句優(yōu)化的步驟為:
        首先,創(chuàng)建視圖GREATE VIEW V_max_cnoscore ASSELECT 課程號,Max(成績) AS 最高分?jǐn)?shù)FROM 成績表GROUP BY 課程號其次,利用視圖檢索數(shù)據(jù)SELECT 學(xué)號,A.課程號,A.成績FROM 成績表A,        V_max_cnoscore BWHERE A.成績=B.最高分?jǐn)?shù)AND A.課程號=B.課程號
        2.2 查詢條件Where 子句的優(yōu)化
        2.2.1 合理設(shè)置WHERE 條件的先后順序。多數(shù)數(shù)據(jù)庫都是按從左到右的順序處理條件,把能過濾更多數(shù)據(jù)的條件放在前面,過濾少的放后面,便可提高檢索速度。例:SELECT * FROM studentWHERE ssex=’女’ -- 條件1過濾的數(shù)據(jù)較少AND sdept=’計算機系’ -- 條件2 過濾數(shù)據(jù)比條件1 多上面的SQL就不符合上述原則,可改為:SELECT * FROM studentWHERE sdept=’計算機系’AND ssex=’女’對同一表格進行多個選擇運算,選擇條件的排序?qū)π阅苡休^大影響,不僅影響索引的選取,而且關(guān)系到臨時表的大小[2]。因此,要提高查詢速度,可將較嚴(yán)格的條件寫在前面,較弱的放在后面。
        2.2.2 避免使用“< >”或“NOT”操作符。

“< >”或“NOT”均屬于排斥性操作符,不是包括性操作符,這會使系統(tǒng)在搜索數(shù)據(jù)時無法使用索引,只能直接搜索表中的數(shù)據(jù),例:
        (1)SELECT 學(xué)號FROM 成績表WHERE 成績< >80
        (2)SELECT 學(xué)號FROM 成績表WHERE NOT(成績<>80)
        (3)SELECT 學(xué)號FROM 成績表WHERE 成績< 80 OR成績>80比較以上三條語句,可知第3 條可使用索引查詢,它的查詢速度最快。
        2.2.3恰當(dāng)運用“OR 擴展”技術(shù)。該技術(shù)是把在Where 子句中帶有OR的查詢轉(zhuǎn)換成包含多個UNION ALL的查詢。例:查詢計算機系縣年齡不大于20 歲的學(xué)生。
        常規(guī)的SQL語句:SELECT 學(xué)號,姓名FROM 學(xué)生表WHERE 系名=’計算機系’ OR 年齡<=20假定表中“系名”和“年齡”兩個字段上創(chuàng)建了索引,以上的查詢可能不會使查詢優(yōu)化器使用索引,從而查詢效率降低,可改進為:SELECT 學(xué)號,姓名FROM 學(xué)生表WHERE 系名=' 計算機系'UNION ALL SELECT 學(xué)號,姓名FROM 學(xué)生表WHERE 年齡<=20
        2.2.4 合理減少LIKE條件的使用。在SQL查詢中,LIKE 條件使用的神奇之處在于其與通配符匹配所提供的模糊查詢功能。但在字符串的比較中,有時大量字符的逐個比較,也會大大降低查找效率。
例:圖書按26 個英文字母分為26 類,查找所有屬于'A’類圖書的銷售金額。SELECT 圖書類號, SUM (數(shù)量*單價) FROM 銷售WHERE 圖書類號LIKE′A%′GROUP BY圖書類號優(yōu)化為精確查詢:SELECT 圖書類號,SUM(數(shù)量*單價) FROM銷售WHERE 圖書類號>=′A′AND 圖書類號<′B′GROUP BY圖書類號
        2.3 正確使用子查詢“展平”技術(shù)子查詢“展平”技術(shù)就是指將子查詢轉(zhuǎn)變?yōu)榘脒B接,連接或者反連接,從而將查詢優(yōu)化。例:找出成績大于等于90 分的學(xué)生的姓名。SELECT 姓名FROM 學(xué)生表WHERE 學(xué)號IN(SELECT 學(xué)號FROM 成績表WHERE 成績>=90)語句缺點:需要搜索學(xué)生表的每一行,來查找所有滿足子查詢條件的記錄。
        解決方案:將學(xué)生表作為連接的內(nèi)表,查詢將作為通常的連接來執(zhí)行。
        優(yōu)化后的SQL語句:SELECT 姓名FROM (SELECT 學(xué)號FROM 成績表WHERE 成績>=90) A,學(xué)生表B WHERE A. 學(xué)號=B.學(xué)號
        2.4 善于使用存儲過程
        存儲過程是SQL 語句和可選控制流語句的預(yù)編譯集合,一個名稱存儲并作為一個單元處理。善于使用存儲過程,將使SQL變得更加靈活和高效。
        例:查詢某個學(xué)生某門課程的考試成績,列出學(xué)生的姓名、
        課程名及成績CREATE PROC pro_student_degree@stu_name char(12),@course_name char(18) ASSELECT sname,cname,degreeFROM student A INNER JOIN sc B ON A.sno=B.snoINNER JOIN course C ON C.cno=B.cnoWHERE sname=@stu_name AND cname=@course_name以上是一個帶有兩個輸入?yún)?shù)的簡單存儲過程,只需執(zhí)行一個簡單的SQL語句———“EXEC pro_student_degre'e 劉娜’,’數(shù)據(jù)庫原理’”就可完成查詢。
        編寫性能優(yōu)化的SQL 語句是提高數(shù)據(jù)庫系統(tǒng)的重要因素,隨著數(shù)據(jù)庫管理系統(tǒng)中數(shù)據(jù)量的增大,如何提高查詢速度與效率也是計算機軟件開發(fā)的一個時代要求。實現(xiàn)優(yōu)化查詢的方法很多,在使用中,要根據(jù)具體情況權(quán)衡利弊,使數(shù)據(jù)庫查詢性能最優(yōu)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多