第3篇13章數(shù)據(jù)庫查詢優(yōu)化_第1頁
第3篇13章數(shù)據(jù)庫查詢優(yōu)化_第2頁
第3篇13章數(shù)據(jù)庫查詢優(yōu)化_第3頁
第3篇13章數(shù)據(jù)庫查詢優(yōu)化_第4頁
第3篇13章數(shù)據(jù)庫查詢優(yōu)化_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

大數(shù)據(jù)計(jì)算機(jī)基礎(chǔ)張延松中國人民大學(xué)信息學(xué)院1目錄2第1章Linux基礎(chǔ)第2章用戶界面和文件管理第3章編輯器及shell編程第4章用戶權(quán)限及磁盤管理第5章系統(tǒng)管理及Linux基本網(wǎng)絡(luò)配置第1篇Linux基礎(chǔ)第4章第4章第4章第4章第4章第5章第5章第5章第5章第2篇Python程序設(shè)計(jì)基礎(chǔ)Python基礎(chǔ)知識Python語言的模塊Python語言的類利用Python獲取數(shù)據(jù)利用Python進(jìn)行數(shù)據(jù)處理第3篇數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫基礎(chǔ)知識數(shù)據(jù)庫查詢語言SQL數(shù)據(jù)庫查詢處理與查詢優(yōu)化技術(shù)SQLServer2017數(shù)據(jù)庫分析處理案例數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述SQL是一種非過程化的查詢語言,SQL語言指出要做什么,并不需要指定如何做,數(shù)據(jù)庫管理系統(tǒng)的查詢處理引擎負(fù)責(zé)根據(jù)用戶提出的SQL命令自動創(chuàng)建優(yōu)化的查詢執(zhí)行計(jì)劃,高效地完成查詢處理任務(wù)。查詢優(yōu)化是數(shù)據(jù)庫的核心技術(shù),查詢優(yōu)化涉及物理設(shè)備存儲訪問特性、存儲模型、索引訪問技術(shù)、查詢實(shí)現(xiàn)技術(shù)等相關(guān)專業(yè)知識,是數(shù)據(jù)庫領(lǐng)域重要的研究課題。本章學(xué)習(xí)的目標(biāo)是向讀者介紹數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)的基本原理,使讀者了解數(shù)據(jù)庫存儲訪問實(shí)現(xiàn)過程、數(shù)據(jù)庫查詢操作的基本實(shí)現(xiàn)技術(shù),對數(shù)據(jù)庫的查詢優(yōu)化技術(shù)有初步的了解,從而更好地了解數(shù)據(jù)庫的優(yōu)化機(jī)制,提高數(shù)據(jù)庫使用效率。本章還對SQLerver2017的內(nèi)存表、內(nèi)存列存儲索引技術(shù)進(jìn)行介紹并設(shè)計(jì)了實(shí)踐案例,使讀者了解現(xiàn)代內(nèi)存數(shù)據(jù)庫的基本特點(diǎn)和使用方法,本章還針對TPC-H復(fù)雜的嵌套子查詢進(jìn)行案例分析,通過查詢改寫案例設(shè)計(jì)讓讀者了解不同的查詢實(shí)現(xiàn)方法及對查詢優(yōu)化技術(shù)的考慮。本章要點(diǎn)/學(xué)習(xí)目標(biāo)內(nèi)存查詢優(yōu)化技術(shù)查詢優(yōu)化案例分析本章內(nèi)容123第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述在數(shù)據(jù)庫中,關(guān)系表示為二維表,由記錄(行)和屬性(列)構(gòu)成,關(guān)系存儲的基本要求是將記錄存儲于持久化外部設(shè)備,支持以記錄或?qū)傩詾榱6鹊脑L問基于行存儲模型的物理存儲一、表存儲結(jié)構(gòu)圖13?1數(shù)據(jù)庫行存儲模型4第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述命令:DBCCIND('TPCH','CUSTOMER',1)命令解析:第一個參數(shù)為數(shù)據(jù)庫名或數(shù)據(jù)庫ID第二個參數(shù)為數(shù)據(jù)庫中的對象名或?qū)ο驣D,包括表和索引第三個參數(shù)表示顯示對象頁的類型,1代表全部對象頁。結(jié)果解析:PagePID為CUSTOMER表的存儲頁面,NextPagePID和PrevPagePID分別代表下面數(shù)據(jù)頁及前一數(shù)據(jù)頁的頁面PIDPageType中的1表示數(shù)據(jù)頁,10表示每個分配單元中表或索引所使用的區(qū)的信息,2表示聚集索引的非葉子節(jié)點(diǎn)和非聚集索引的所有索引記錄?!纠?3-1】查詢SQLserver數(shù)據(jù)頁鏈表結(jié)構(gòu)。5圖13?2SQLserver數(shù)據(jù)頁鏈表結(jié)構(gòu)第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述命令:DBCCTRACEON(3604)DBCCPAGE(TPCH,1,73880,3)【例13-2】查看SQLserver數(shù)據(jù)頁內(nèi)部存儲結(jié)構(gòu)。6圖13?3SQLserver數(shù)據(jù)頁面內(nèi)部結(jié)構(gòu)第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述行存儲數(shù)據(jù)庫的特點(diǎn)是記錄的屬性在數(shù)據(jù)頁面的slot中連續(xù)存儲,一次磁盤I/O訪問的數(shù)據(jù)頁中能訪問記錄的所有屬性值。這種存儲結(jié)構(gòu)適合一次訪問全部記錄或記錄中大多數(shù)屬性的操作,如插入、刪除和修改等更新操作,但分析處理任務(wù)通常只選擇表中較少的屬性列進(jìn)行計(jì)算,在行存儲結(jié)構(gòu)的關(guān)系表中則需要掃描全部的數(shù)據(jù)頁并只使用其中較少的數(shù)據(jù)項(xiàng),存儲訪問效率較低。一、表存儲結(jié)構(gòu)圖13-4行存儲查詢處理過程7第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述針對分析處理任務(wù)只使用較少屬性的特點(diǎn),分析型數(shù)據(jù)庫主要使用列存儲模型來優(yōu)化存儲訪問,即以列為表的物理存儲單位,各列單獨(dú)存儲,單獨(dú)訪問。采用列存儲模型時(shí),表中的每一個列獨(dú)立存儲,相同類型和語義的列數(shù)據(jù)連續(xù)存儲在一起。相對于行存儲模型,訪問一條記錄需要訪問多個連接列文件相同的位置,增加了記錄訪問的磁盤I/O數(shù)量,但當(dāng)查詢只訪問少量的列時(shí)能夠?qū)崿F(xiàn)對指定列數(shù)據(jù)的連續(xù)訪問,磁盤I/O效率較高,不需要象行存儲一樣訪問無效數(shù)據(jù)。一、表存儲結(jié)構(gòu)8第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述一、表存儲結(jié)構(gòu)圖13-5列存儲查詢處理過程9第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述緩沖區(qū)管理是數(shù)據(jù)庫管理系統(tǒng)重要的功能模塊,實(shí)現(xiàn)通過內(nèi)存加速磁盤數(shù)據(jù)訪問及查詢處理。緩沖區(qū)分為不同類型,包含共享內(nèi)存、工作內(nèi)存、日志緩沖區(qū)等。共享內(nèi)存(shared_buffers)用于緩存磁盤數(shù)據(jù)頁,較大的共享內(nèi)存能夠緩存磁盤中較多的數(shù)據(jù)頁,使共享查詢的數(shù)據(jù)訪問能夠從緩沖區(qū)命中而避免訪問慢速的磁盤,從而提高數(shù)據(jù)訪問性能。工作內(nèi)存(work_mem)用于查詢中排序、哈希等操作的內(nèi)存分配,減少查詢處理時(shí)的磁盤讀寫操作。日志緩沖區(qū)(wal_buffer)用于緩存日志,在較多的并發(fā)更新操作時(shí)減少日志寫磁盤的代價(jià)。二、緩沖區(qū)管理10第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述執(zhí)行R表與S表的連接操作并對查詢結(jié)果排序時(shí),需要按一定的優(yōu)化策略從磁盤讀取R表和S表的數(shù)據(jù)頁加載到緩沖區(qū)共享內(nèi)存,選擇優(yōu)化的連接算法,如在工作內(nèi)存創(chuàng)建哈希表,執(zhí)行R表與S表上的哈希連接操作,然后對結(jié)果集排序。11二、緩沖區(qū)管理圖5-6數(shù)據(jù)庫緩沖區(qū)管理第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述命令:DBCCDROPCLEANBUFFERSDBCCFREEPROCCACHESETSTATISTICSIOONSETSTATISTICSTIMEONSELECTSUM(P_SIZE)FROMPART;SELECTSUM(P_SIZE)FROMPART;SETSTATISTICSIOOFFSETSTATISTICSTIMEOFF命令解析:DBCCDROPCLEANBUFFERS和

DBCCFREEPROCCACHE命令用

于清除SQLServer的數(shù)據(jù)和過程緩

沖區(qū),以準(zhǔn)確統(tǒng)計(jì)SQL命令執(zhí)行時(shí)

的時(shí)間和磁盤I/O數(shù)量。SETSTATISTICSIOON和

SETSTATISTICSTIMEON命令設(shè)置

查詢執(zhí)行引擎顯示SQL命令執(zhí)行時(shí)的

時(shí)間和I/O統(tǒng)計(jì)信息。12【例13-3】查看SQLserver查詢時(shí)緩沖區(qū)工作狀態(tài)。圖13?7數(shù)據(jù)庫緩沖區(qū)管理示例第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述索引的查詢優(yōu)化作用主要體現(xiàn)在三個方面:索引為特定屬性或?qū)傩越M創(chuàng)建索引結(jié)構(gòu),相當(dāng)于一種列存儲模型,相對于較寬的表上基于全表掃描的查找機(jī)制具有較高的I/O存儲訪問效率;由于索引相對較小,通??梢择v留在數(shù)據(jù)庫緩沖區(qū),通過內(nèi)存索引存儲訪問進(jìn)一步提高數(shù)據(jù)訪問性能;索引采用優(yōu)化查找性能的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì),能有效地提高索引鍵值的查找性能。當(dāng)為查找屬性創(chuàng)建索引時(shí),首先在索引上執(zhí)行鍵值查找任務(wù),然后根據(jù)查找到的索引項(xiàng)中的記錄地址訪問表數(shù)據(jù)頁,輸出查詢結(jié)果。索引能夠加速數(shù)據(jù)庫的鍵值查找性能,為頻繁訪問的屬性創(chuàng)建索引是數(shù)據(jù)庫代表性的優(yōu)化技術(shù),但索引需要額外的存儲空間。三、索引查詢優(yōu)化技術(shù)13【例13-4】查看在沒有索引和創(chuàng)建索引情況下的數(shù)據(jù)庫查找操作的數(shù)據(jù)訪問性能。SETSTATISTICSIOONSETSTATISTICSTIMEONDBCCDROPCLEANBUFFERSDBCCFREEPROCCACHEselect*fromlineitem;DBCCDROPCLEANBUFFERSDBCCFREEPROCCACHEselectl_partkeyfromlineitem;DBCCDROPCLEANBUFFERSDBCCFREEPROCCACHEselect*fromlineitemwherel_partkey=

152774;createindexpartkyonlineitem(l_partkey);DBCCDROPCLEANBUFFERSDBCCFREEPROCCACHEselect*fromlineitemwherel_partkey=

152774;SETSTATISTICSIOOFFSETSTATISTICSTIMEOFF14第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述首先查看全表掃描的磁盤訪問數(shù)量和查詢執(zhí)行時(shí)間,然后查看查找列上投影操作的性能和按鍵值查詢的性能,為查找列創(chuàng)建索引后再查看索引查找性能。select*fromlineorder;15第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述selectl_partkeyfromlineitem;select*fromlineitemwherel_partkey=

152774;16第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述select*fromlineitemwherel_partkey=

152774;(創(chuàng)建索引后)從查詢統(tǒng)計(jì)信息可以看到,當(dāng)表上沒有索引時(shí),行存儲數(shù)據(jù)庫需要執(zhí)行全表掃描操作完成查找任務(wù),前兩個SQL命令讀取磁盤數(shù)據(jù)頁均為103601次,第三個SQL命令讀取103605次;當(dāng)為查找屬性創(chuàng)建索引時(shí),首先在索引上執(zhí)行鍵值查找任務(wù),然后根據(jù)查找到的索引項(xiàng)中的記錄地址訪問表數(shù)據(jù)頁,輸出查詢結(jié)果,索引查找操作產(chǎn)生的磁盤數(shù)據(jù)頁讀取數(shù)量為336次,相當(dāng)于沒有索引時(shí)數(shù)據(jù)訪問數(shù)量的0.32%,查找時(shí)間為沒有索引時(shí)查找時(shí)間的0.63%。索引能夠加速數(shù)據(jù)庫的鍵值查找性能,為頻繁訪問的屬性創(chuàng)建索引是數(shù)據(jù)庫代表性的優(yōu)化技術(shù),但索引需要額外的存儲空間。通過下面的命令查看lineitem表的存儲空間情況,發(fā)現(xiàn)表上創(chuàng)建兩個索引的存儲空間約占原始表存儲空間大小的13.3%,當(dāng)表上創(chuàng)建較多的索引時(shí)可能超原始表大小。除額外的存儲空間代價(jià)外,當(dāng)表上創(chuàng)建索引時(shí),表上的數(shù)據(jù)更新操作需要在表與索引上同步更新,增加了更新操作執(zhí)行時(shí)間,對更新操作性能產(chǎn)生一定的影響。索引是數(shù)據(jù)庫重要的性能優(yōu)化手段,但索引的使用需要綜合評估索引存儲空間消耗、索引更新代價(jià)、索引性能等因素,并通過優(yōu)化的策略以達(dá)到較好的綜合性能。execsp_spaceused'LINEITEM';execsp_helpindexLINEITEM;17第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述練習(xí)題:使用存儲頁訪問命令分析某個表的索引結(jié)構(gòu),畫出B+樹索引結(jié)構(gòu)圖。18第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述數(shù)據(jù)庫查詢優(yōu)化器采用基于代價(jià)模型的優(yōu)化技術(shù),對SQL命令的候選執(zhí)行計(jì)劃進(jìn)行代價(jià)分析(主要以磁盤I/O代價(jià)為主),從中選擇執(zhí)行代價(jià)最低的查詢執(zhí)行計(jì)劃來完成查詢處理。四、基于代價(jià)模型的查詢優(yōu)化【例13-6】查看SQL命令執(zhí)行計(jì)劃。在數(shù)據(jù)庫引擎窗口中輸入SQL命令,系統(tǒng)保留關(guān)鍵字顯示為藍(lán)色,函數(shù)名顯示為粉色,表名、列名顯示為綠色,邏輯操作符顯示為灰色,字符串顯示為紅色,數(shù)值顯示為黑色,顏色顯示有助于用戶檢查SQL命令中的語法錯誤。SQL命令通過執(zhí)行按鈕運(yùn)行,查詢結(jié)果顯示在窗口下面的窗口中,結(jié)果窗口顯示SQL命令執(zhí)行的結(jié)果集,窗口下部的狀態(tài)欄顯示SQL命令執(zhí)行狀態(tài),執(zhí)行時(shí)間以及結(jié)果集行數(shù)。消息窗口中顯示SQL命令執(zhí)行的系統(tǒng)消息。19selectn_name,sum(l_extendedprice*(1-l_discount))asrevenuefromcustomer,orders,lineitem,supplier,nation,regionwherec_custkey=o_custkeyandl_orderkey=o_orderkeyandl_suppkey=s_suppkeyandc_nationkey=s_nationkeyands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='ASIA'ando_orderdate>='1994-01-01'ando_orderdate<'1995-01-01'groupbyn_nameorderbyrevenuedesc;20第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述通過【查詢】菜單的【顯示估計(jì)的執(zhí)行計(jì)劃】命令可以分析指定的SQL命令執(zhí)行計(jì)劃。在“執(zhí)行計(jì)劃”窗口中顯示SQL命令詳細(xì)的執(zhí)行步驟。將鼠標(biāo)置于查詢執(zhí)行計(jì)劃節(jié)點(diǎn)上顯示該執(zhí)行計(jì)劃節(jié)點(diǎn)的詳細(xì)信息,如操作名稱、估算的I/O代價(jià)、估算的操作代價(jià)、估算的CPU代價(jià)、估算的行數(shù)及記錄大小等信息,還包括輸出數(shù)據(jù)列表、操作符對應(yīng)的數(shù)據(jù)結(jié)構(gòu)等。圖形化的查詢執(zhí)行計(jì)劃有助于用戶了解數(shù)據(jù)庫內(nèi)部的SQL查詢執(zhí)行過程和原理,理解數(shù)據(jù)庫查詢性能優(yōu)化技術(shù)。21第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述【例13-7】通過數(shù)據(jù)庫引擎優(yōu)化顧問分析數(shù)據(jù)庫負(fù)載的優(yōu)化策略。【查詢】菜單中的命令【在數(shù)據(jù)庫引擎優(yōu)化顧問中分析查詢】用于分析查詢執(zhí)行計(jì)劃,并給出查詢優(yōu)化建議和報(bào)告,用于用戶改進(jìn)數(shù)據(jù)庫查詢處理性能。以TPCH數(shù)據(jù)庫的Q5命令負(fù)載為例,通過SQLServer2017的數(shù)據(jù)庫引擎優(yōu)化顧問來分析查詢優(yōu)化方案。啟動數(shù)據(jù)庫引擎優(yōu)化顧問后單擊連接按鈕建立與數(shù)據(jù)庫的連接,然后啟動新會話,創(chuàng)建查詢優(yōu)化任務(wù)。選擇開始分析后,數(shù)據(jù)庫引擎優(yōu)化顧問對SQL負(fù)載進(jìn)行分析,分析表、列訪問情況,索引使用情況等,為用戶提供查詢優(yōu)化建議。在索引建議中列出數(shù)據(jù)庫引擎優(yōu)化顧問給出的優(yōu)化策略,例如創(chuàng)建頻繁訪問列的統(tǒng)計(jì)信息、為查詢相關(guān)列創(chuàng)建索引等建議。用戶可以復(fù)制優(yōu)化建議中的SQL腳本并在SQL管理器中執(zhí)行,創(chuàng)建索引或統(tǒng)計(jì)信息以優(yōu)化查詢負(fù)載。22第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述23第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述報(bào)告選項(xiàng)卡中包含生成的優(yōu)化報(bào)告,用戶可以查看相關(guān)報(bào)告了解索引使用情況,索引建議使用情況,表訪問及列訪問統(tǒng)計(jì)信息,通過相關(guān)的優(yōu)化報(bào)告信息設(shè)計(jì)數(shù)據(jù)庫中的優(yōu)化策略,提高查詢負(fù)載的整體性能。24第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述【例13-8】通過索引優(yōu)化SQL查詢性能。以下面TPCH查詢Q5命令為例,在ORDERS表上存在O_ORDERDATE列上的選擇操作,通過selectcount(distinctO_ORDERDATE)fromORDERS;命令查看O_ORDERDATE列上的不重復(fù)值達(dá)到2406個,因此O_ORDERDATE>='1994-01-01'ANDO_ORDERDATE<'1995-01-01'對應(yīng)低選擇率的操作,在沒有索引的情況下需要對ORDERS表進(jìn)行全表掃描。DBCCDROPCLEANBUFFERSDBCCFREEPROCCACHESETSTATISTICSIOONSETSTATISTICSTIMEONselectn_name,sum(l_extendedprice*(1-l_discount))asrevenuefromcustomer,orders,lineitem,supplier,nation,regionwherec_custkey=o_custkeyandl_orderkey=o_orderkeyandl_suppkey=s_suppkeyandc_nationkey=s_nationkeyands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='ASIA'ando_orderdate>='1994-01-01'ando_orderdate<'1995-01-01'groupbyn_nameorderbyrevenuedesc;25第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述在【查詢】菜單中選擇【包括實(shí)際的執(zhí)行計(jì)劃】,執(zhí)行SQL命令后在窗口中顯示執(zhí)行計(jì)劃,其中orders表上的掃描開銷達(dá)到15%,I/O訪問代價(jià)較高。26第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述在清理緩存并設(shè)置I/O與執(zhí)行時(shí)間統(tǒng)計(jì)狀態(tài)下查看SQL命令執(zhí)行時(shí)間,其中orders表上預(yù)讀22766次,為全表掃描代價(jià)。27第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述通過createindexO_ORDERDATEonORDERS(O_ORDERDATE);命令為ORDERS表上的O_ORDERDATE列創(chuàng)建索引,通過索引加速O_ORDERDATE>='1994-01-01'ANDO_ORDERDATE<'1995-01-01'低選擇率的選擇操作性能。28第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述當(dāng)選擇率較高時(shí)索引訪問產(chǎn)生較多的隨機(jī)I/O訪問代價(jià),數(shù)據(jù)庫通常不使用索引掃描,當(dāng)選擇率足夠低時(shí),數(shù)據(jù)庫才使用索引掃描。因此,數(shù)據(jù)庫中的索引是一種訪問加速技術(shù),但其主要應(yīng)用于低選擇率的查詢中。將O_ORDERDATE>='1994-01-01'ANDO_ORDERDATE<'1995-01-01'條件改為O_ORDERDATE>='1994-01-01'ANDO_ORDERDATE<'1994-01-10',將選擇率降為0.38%,再次執(zhí)行查詢命令。查詢執(zhí)行時(shí)ORDERS表預(yù)讀次數(shù)降低,查詢執(zhí)行時(shí)間從原始的2176毫秒降為158毫秒。29第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述查看執(zhí)行計(jì)劃,ORDERS表上執(zhí)行索引掃描IndexSeek操作,索引發(fā)揮加速作用。30第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述第1節(jié)數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述數(shù)據(jù)庫支持非過程化查詢語言的技術(shù)基礎(chǔ)是通過對SQL命令的解析,基于代價(jià)模型為查詢創(chuàng)建不同的查詢執(zhí)行計(jì)劃并選擇較優(yōu)的查詢執(zhí)行計(jì)劃完成查詢?nèi)蝿?wù)。數(shù)據(jù)庫的查詢優(yōu)化器自動根據(jù)數(shù)據(jù)庫的優(yōu)化策略,如索引、存儲模型、統(tǒng)計(jì)信息等因素生成優(yōu)化的查詢執(zhí)行計(jì)劃,用戶不直接決定查詢執(zhí)行計(jì)劃。在以磁盤為主的數(shù)據(jù)庫系統(tǒng)中,磁盤I/O是查詢處理最主要的代價(jià),查詢優(yōu)化技術(shù)的核心是通過緩沖區(qū)管理、索引等技術(shù)減少磁盤I/O訪問,優(yōu)化內(nèi)存利用率,提高查詢處理性能。小結(jié)31數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述SQL是一種非過程化的查詢語言,SQL語言指出要做什么,并不需要指定如何做,數(shù)據(jù)庫管理系統(tǒng)的查詢處理引擎負(fù)責(zé)根據(jù)用戶提出的SQL命令自動創(chuàng)建優(yōu)化的查詢執(zhí)行計(jì)劃,高效地完成查詢處理任務(wù)。查詢優(yōu)化是數(shù)據(jù)庫的核心技術(shù),查詢優(yōu)化涉及物理設(shè)備存儲訪問特性、存儲模型、索引訪問技術(shù)、查詢實(shí)現(xiàn)技術(shù)等相關(guān)專業(yè)知識,是數(shù)據(jù)庫領(lǐng)域重要的研究課題。本章學(xué)習(xí)的目標(biāo)是向讀者介紹數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)的基本原理,使讀者了解數(shù)據(jù)庫存儲訪問實(shí)現(xiàn)過程、數(shù)據(jù)庫查詢操作的基本實(shí)現(xiàn)技術(shù),對數(shù)據(jù)庫的查詢優(yōu)化技術(shù)有初步的了解,從而更好地了解數(shù)據(jù)庫的優(yōu)化機(jī)制,提高數(shù)據(jù)庫使用效率。本章還對SQLerver2017的內(nèi)存表、內(nèi)存列存儲索引技術(shù)進(jìn)行介紹并設(shè)計(jì)了實(shí)踐案例,使讀者了解現(xiàn)代內(nèi)存數(shù)據(jù)庫的基本特點(diǎn)和使用方法,本章還針對TPC-H復(fù)雜的嵌套子查詢進(jìn)行案例分析,通過查詢改寫案例設(shè)計(jì)讓讀者了解不同的查詢實(shí)現(xiàn)方法及對查詢優(yōu)化技術(shù)的考慮。本章要點(diǎn)/學(xué)習(xí)目標(biāo)內(nèi)存查詢優(yōu)化技術(shù)查詢優(yōu)化案例分析本章內(nèi)容123第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)內(nèi)存數(shù)據(jù)庫通過內(nèi)存存儲模型實(shí)現(xiàn)數(shù)據(jù)存儲在高性能內(nèi)存,從而顯著提高查詢處理性能。以SQLServerHekaton內(nèi)存引擎為例,數(shù)據(jù)庫可以創(chuàng)建內(nèi)存優(yōu)化表。在SQLServer2017中創(chuàng)建內(nèi)存表需要以下幾個步驟:創(chuàng)建內(nèi)存優(yōu)化數(shù)據(jù)文件組并為文件組增加容器創(chuàng)建內(nèi)存優(yōu)化表導(dǎo)入數(shù)據(jù)到內(nèi)存優(yōu)化表一、內(nèi)存表33第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)【例13?9】為TPC-H(TPCH)數(shù)據(jù)庫的LINEITEM表創(chuàng)建內(nèi)存表。(1)為數(shù)據(jù)庫TPCH創(chuàng)建內(nèi)存優(yōu)化數(shù)據(jù)文件組并為文件組增加容器ALTERDATABASETPCHADDFILEGROUPTPCH_FGCONTAINSMEMORY_OPTIMIZED_DATAALTERDATABASETPCHADDFILE(NAME='TPCH_FG',FILENAME='C:\IM_DATA\TPCH_FG')TOFILEGROUPTPCH_FG;為數(shù)據(jù)庫TPCH增加文件組TPCH_FG,為文件組增加文件C:\IM_DATA\TPCH_FG作為數(shù)據(jù)容器。命令成功執(zhí)行后,查看數(shù)據(jù)庫TPCH屬性中的文件組選項(xiàng)頁可以看到內(nèi)存優(yōu)化數(shù)據(jù)窗口中的SSBM_mod,在文件組容器目錄中可以查看到相關(guān)的數(shù)據(jù)目錄。34第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)(2)創(chuàng)建內(nèi)存表通過下面的SQL命令創(chuàng)建內(nèi)存表LINEITEM_IMCREATETABLELINEITEM_IM(

L_ORDERKEY integer notnull, L_PARTKEY integer notnull, L_SUPPKEY integer notnull, L_LINENUMBER integer notnull, L_QUANTITY float notnull, L_EXTENDEDPRICE float notnull, L_DISCOUNT float notnull, L_TAX float notnull, L_RETURNFLAG char(1) notnull, L_LINESTATUS char(1) notnull, L_SHIPDATE date notnull, L_COMMITDATE date notnull, L_RECEIPTDATE date notnull, L_SHIPINSTRUCT char(25) notnull, L_SHIPMODE char(10) notnull, L_COMMENT varchar(44) notnull, PRIMARYKEYNONCLUSTERED(L_ORDERKEY,L_LINENUMBER), indexix_orderkeyhash(L_ORDERKEY,L_LINENUMBER)with(bucket_count=8000000))WITH(MEMORY_OPTIMIZED=ON,DURABILITY=SCHEMA_AND_DATA);35第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)(2)創(chuàng)建內(nèi)存表其中子句indexix_orderkeynonclusteredhash(lo_orderkey,lo_linenumber)with(bucket_count=8000000)用于創(chuàng)建主鍵哈希索引。命令子句WITH(MEMORY_OPTIMIZED=ON,DURABILITY=SCHEMA_ONLY)用于設(shè)置內(nèi)存表類型,MEMORY_OPTIMIZED=ON表示創(chuàng)建表為內(nèi)存表。DURABILITY=SCHEMA_ONLY表示創(chuàng)建非持久化內(nèi)存優(yōu)化表,不記錄這些表的日志且不在磁盤上保存它們的數(shù)據(jù),即這些表上的事務(wù)不需要任何磁盤I/O,但如果服務(wù)器崩潰或進(jìn)行故障轉(zhuǎn)移,則無法恢復(fù)數(shù)據(jù);DURABILITY=SCHEMA_AND_DATA表示內(nèi)存優(yōu)化表是完全持久性的,整個表的主存儲是在內(nèi)存中,即為從內(nèi)存讀取表中的行,和更新這些行數(shù)據(jù)到內(nèi)存中,但內(nèi)存優(yōu)化表的數(shù)據(jù)同時(shí)還在磁盤上維護(hù)著一個僅用于持久性目的副本,在數(shù)據(jù)庫恢復(fù)期間,內(nèi)存優(yōu)化的表中的數(shù)據(jù)可以再次從磁盤裝載。36第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)(3)將數(shù)據(jù)從lineorder表導(dǎo)入內(nèi)存表通過insert語句將lineorder表中的記錄導(dǎo)入內(nèi)存優(yōu)化表lineorder_im中。insertintoLINEITEM_IMselect*fromLINEITEM;(4)SQL查詢性能對比測試TPC-H查詢Q1在LINEITEM表上進(jìn)行分析處理37--DiskTableLINEITEMSELECTL_RETURNFLAG,L_LINESTATUS,SUM(L_QUANTITY)ASSUM_QTY,SUM(L_EXTENDEDPRICE)ASSUM_BASE_PRICE,SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT))ASSUM_DISC_PRICE,SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)*(1+L_TAX))ASSUM_CHARGE,AVG(L_QUANTITY)ASAVG_QTY,AVG(L_EXTENDEDPRICE)ASAVG_PRICE,AVG(L_DISCOUNT)ASAVG_DISC,COUNT(*)ASCOUNT_ORDERFROMLINEITEMWHEREL_SHIPDATE<='1998-12-01'GROUPBYL_RETURNFLAG,L_LINESTATUSORDERBYL_RETURNFLAG,L_LINESTATUS;第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)基于內(nèi)存表訪問的查詢消除了lineitem_IM表的磁盤I/O代價(jià),查詢執(zhí)行時(shí)間有所減少。38--MemoryTableLINEITEM_IMselectl_returnflag,l_linestatus,sum(l_quantity)assum_qty,sum(l_extendedprice)assum_base_price,sum(l_extendedprice*(1-l_discount))assum_disc_price,sum(l_extendedprice*(1-l_discount)*(1+l_tax))assum_charge,avg(l_quantity)asavg_qty,avg(l_extendedprice)asavg_price,avg(l_discount)asavg_disc,count(*)ascount_orderfromlineitem_IMwherel_shipdate<='1998-12-01'groupbyl_returnflag,l_linestatusorderbyl_returnflag,l_linestatus;第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)SQLServer支持一種新的ColumnStore索引,采用列存儲方式存儲索引中指定的列。列存儲索引是將行存儲表劃分為行組,行組中的屬性按列存儲并按列進(jìn)行壓縮。創(chuàng)建列存儲索引能夠?qū)崿F(xiàn)對數(shù)據(jù)的按列訪問,在分析型查詢只涉及較少屬性的應(yīng)用場景中相對于傳統(tǒng)的行存儲模型極大地提高了數(shù)據(jù)訪問效率和性能。二、列存儲索引圖5-31列存儲索引存儲結(jié)構(gòu)39第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)【例5-10】為TPCH數(shù)據(jù)庫的LINEITEM表創(chuàng)建列存儲索引,通過Q1查詢測試性能。測試查詢中LINEITEM表中訪問列L_QUANTITY、L_EXTENDEDPRICE、L_DISCOUNT、L_TAX、L_SHIPDATE、L_RETURNFLAG、L_LINESTATUS,為這些列創(chuàng)建列存儲索引時(shí)實(shí)現(xiàn)在查詢中按列訪問相應(yīng)的屬性。創(chuàng)建列存儲索引命令如下:CREATENONCLUSTEREDCOLUMNSTOREINDEXcsindx_LINEITEMONLINEITEM(L_QUANTITY,L_EXTENDEDPRICE,L_DISCOUNT,L_TAX,L_SHIPDATE,L_RETURNFLAG,L_LINESTATUS);創(chuàng)建列存儲索引后,表中增加了列存儲索引對象當(dāng)查詢訪問列存儲索引相關(guān)屬性時(shí),查詢處理引擎自動訪問列存儲索引來加速數(shù)據(jù)訪問性能。40第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)測試在內(nèi)存表和創(chuàng)建列存儲索引表上的單列訪問性能selectsum(L_QUANTITY)fromLINEITEM_IM;selectsum(L_QUANTITY)fromLINEITEM;41在同樣的內(nèi)存數(shù)據(jù)訪問時(shí),列存儲索引相對于行存儲的內(nèi)存列具有更高的數(shù)據(jù)訪問效率,節(jié)省了內(nèi)存帶寬,查詢性能獲得顯著的提升。第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)查看兩個查詢的執(zhí)行計(jì)劃,主要區(qū)別在于表掃描方法。內(nèi)存表采用全表掃描方式,建立列存儲索引的表采用列存儲索引掃描,只訪問查詢指定的列,數(shù)據(jù)訪問效率更高。42第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)在內(nèi)存優(yōu)化表上不支持createindex命令,不能直接創(chuàng)建列存儲索引。在創(chuàng)建內(nèi)存表時(shí)可以為其創(chuàng)建列存儲索引,需要在創(chuàng)建內(nèi)存表的命令中增加INDEXXXXXCLUSTEREDCOLUMNSTORE子句來指定列存儲索引。下面的示例說明為LINEITEM表創(chuàng)建內(nèi)存表和列存儲索引的命令。43CREATETABLELINEITEM_IM_CSI( L_ORDERKEY integer notnull, L_PARTKEY integer notnull, L_SUPPKEY integer notnull, L_LINENUMBER integer notnull, L_QUANTITY float notnull, L_EXTENDEDPRICE float notnull, L_DISCOUNT float notnull, L_TAX float notnull, L_RETURNFLAG char(1) notnull, L_LINESTATUS char(1) notnull, L_SHIPDATE date notnull, L_COMMITDATE date notnull, L_RECEIPTDATE date notnull, L_SHIPINSTRUCT char(25) notnull, L_SHIPMODE char(10) notnull, L_COMMENT varchar(44)notnull, PRIMARYKEYNONCLUSTERED(L_ORDERKEY,L_LINENUMBER), INDEXLINEITEM_IMCCICLUSTEREDCOLUMNSTORE)WITH(MEMORY_OPTIMIZED=ON,DURABILITY=SCHEMA_AND_DATA);第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)圖5-36顯示了在建有列存儲索引的磁盤表LINEITEM、內(nèi)存列存儲索引表LINEITEM_IM_CSI和內(nèi)存表LINEITEM_IM上執(zhí)行單列訪問操作時(shí)的查詢執(zhí)行時(shí)間:selectsum(L_QUANTITY)fromLINEITEM;selectsum(L_QUANTITY)fromLINEITEM_IM_CSI;selectsum(L_QUANTITY)fromLINEITEM_IM;內(nèi)存列存儲索引表最快,其次是列存儲索引表,最慢的是內(nèi)存表。44圖5?36列存儲索引與內(nèi)存表列訪問測試第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)在三個表上執(zhí)行完整的Q1查詢,查詢執(zhí)行時(shí)間如圖5-37所示。內(nèi)存列存儲索引表優(yōu)于列存儲索引表,列存儲索引表優(yōu)于內(nèi)存表。在分析型任務(wù)中,SQL通常在表中只訪問較少的列,列存儲索引有效地減少了對不需要列數(shù)據(jù)的訪問,提高了查詢性能。45圖5?37列存儲索引表、內(nèi)存列存儲索引表與內(nèi)存表查詢性能對比第2節(jié)內(nèi)存查詢優(yōu)化技術(shù)小結(jié)SQLServer2017的內(nèi)存表和列存儲索引技術(shù)從內(nèi)存存儲技術(shù)和列存儲技術(shù)兩方面提供了查詢優(yōu)化技術(shù),能夠有效地提高分析型查詢處理性能。內(nèi)存存儲優(yōu)化技術(shù)是當(dāng)前數(shù)據(jù)庫的代表性技術(shù),隨著硬件技術(shù)對大內(nèi)存的支持,基于內(nèi)存表和內(nèi)存列存儲索引技術(shù)的查詢優(yōu)化技術(shù)成為查詢優(yōu)化的新手段。46數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)基本原理概述SQL是一種非過程化的查詢語言,SQL語言指出要做什么,并不需要指定如何做,數(shù)據(jù)庫管理系統(tǒng)的查詢處理引擎負(fù)責(zé)根據(jù)用戶提出的SQL命令自動創(chuàng)建優(yōu)化的查詢執(zhí)行計(jì)劃,高效地完成查詢處理任務(wù)。查詢優(yōu)化是數(shù)據(jù)庫的核心技術(shù),查詢優(yōu)化涉及物理設(shè)備存儲訪問特性、存儲模型、索引訪問技術(shù)、查詢實(shí)現(xiàn)技術(shù)等相關(guān)專業(yè)知識,是數(shù)據(jù)庫領(lǐng)域重要的研究課題。本章學(xué)習(xí)的目標(biāo)是向讀者介紹數(shù)據(jù)庫查詢處理實(shí)現(xiàn)技術(shù)和查詢優(yōu)化技術(shù)的基本原理,使讀者了解數(shù)據(jù)庫存儲訪問實(shí)現(xiàn)過程、數(shù)據(jù)庫查詢操作的基本實(shí)現(xiàn)技術(shù),對數(shù)據(jù)庫的查詢優(yōu)化技術(shù)有初步的了解,從而更好地了解數(shù)據(jù)庫的優(yōu)化機(jī)制,提高數(shù)據(jù)庫使用效率。本章還對SQLerver2017的內(nèi)存表、內(nèi)存列存儲索引技術(shù)進(jìn)行介紹并設(shè)計(jì)了實(shí)踐案例,使讀者了解現(xiàn)代內(nèi)存數(shù)據(jù)庫的基本特點(diǎn)和使用方法,本章還針對TPC-H復(fù)雜的嵌套子查詢進(jìn)行案例分析,通過查詢改寫案例設(shè)計(jì)讓讀者了解不同的查詢實(shí)現(xiàn)方法及對查詢優(yōu)化技術(shù)的考慮。本章要點(diǎn)/學(xué)習(xí)目標(biāo)內(nèi)存查詢優(yōu)化技術(shù)查詢優(yōu)化案例分析本章內(nèi)容123第3節(jié)查詢優(yōu)化案例分析任務(wù):分析嵌套查詢Q2的執(zhí)行過程,子查詢執(zhí)行原理以及等價(jià)的查詢執(zhí)行方式。1.原始SQL命令Q2查詢改寫selects_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_commentfrompart,supplier,partsupp,nation,regionwherep_partkey=ps_partkeyands_suppkey=ps_suppkeyandp_size=15andp_typelike'%BRASS'ands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE'andps_supplycost=(selectmin(ps_supplycost)frompartsupp,supplier,nation,regionwherep_partkey=ps_partkeyands_suppkey=ps_suppkeyands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE')orderbys_acctbaldesc,n_name,s_name,p_partkey;48第3節(jié)查詢優(yōu)化案例分析外層查詢“ps_supplycost=”表達(dá)式為子查詢結(jié)果,即內(nèi)層子查詢輸入的min(ps_supplycost)結(jié)果。首先,判斷內(nèi)層子查詢能否獨(dú)立執(zhí)行,執(zhí)行結(jié)果顯示由于缺失p_partkey信息而無法執(zhí)行。在內(nèi)層子查詢中from子句中人工添加part表或去掉子查詢中p_partkey=ps_partkey條件,使內(nèi)層子查詢可以執(zhí)行。2.查詢分析--增加子查詢part表selects_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_commentfrompart,supplier,partsupp,nation,regionwherep_partkey=ps_partkeyands_suppkey=ps_suppkeyandp_size=15andp_typelike'%BRASS'ands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE'andps_supplycost=(selectmin(ps_supplycost)frompartsupp,supplier,nation,region,part--人工添加part表wherep_partkey=ps_partkeyands_suppkey=ps_suppkeyands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE')orderbys_acctbaldesc,n_name,s_name,p_partkey;49第3節(jié)查詢優(yōu)化案例分析對比結(jié)果發(fā)現(xiàn)更改后查詢結(jié)果與原始查詢結(jié)果不一致,修改后的兩個查詢結(jié)果一致,說明增加part表或者去掉part相連接表過式結(jié)果是等價(jià)的。--去掉子查詢中part表?xiàng)l件selects_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_commentfrompart,supplier,partsupp,nation,regionwherep_partkey=ps_partkeyands_suppkey=ps_suppkeyandp_size=15andp_typelike'%BRASS'ands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE'andps_supplycost=(selectmin(ps_supplycost)frompartsupp,supplier,nation,region,part--人工添加part表wherep_partkey=ps_partkeyands_suppkey=ps_suppkeyands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE')orderbys_acctbaldesc,n_name,s_name,p_partkey;50第3節(jié)查詢優(yōu)化案例分析為分析原始Q2查詢與修改后查詢的不同,分別對比原始查詢與去掉子查詢part表連接條件查詢的執(zhí)行計(jì)劃。Q2查詢計(jì)劃中part表中謂詞條件所篩選出記錄的p_partkey值下推到內(nèi)層子查詢中,內(nèi)層子查詢底層partsupp表上首先根據(jù)下推的p_partkey值進(jìn)行篩選,然后再執(zhí)行與supplier,nation,region表的連接操作。圖5-39Q2查詢計(jì)劃51第3節(jié)查詢優(yōu)化案例分析修改后的子查詢?nèi)サ袅伺cpart表連接的表達(dá)式,內(nèi)層子查詢變成一個獨(dú)立的查詢,查詢計(jì)劃表示partsupp分別與supplier表、nation表、region表連接并計(jì)算出min(ps_supplycost)表達(dá)式結(jié)果,并將該結(jié)果以常量方式返回外層查詢。修改后的查詢執(zhí)行計(jì)劃與原始Q2查詢由外層查詢產(chǎn)生p_partkey值并一一下推到內(nèi)層查詢計(jì)算min(ps_supplycost)表達(dá)式結(jié)果,并根據(jù)每一個表達(dá)式結(jié)果執(zhí)行外層查詢的執(zhí)行方式是完全不同的。圖5-40修改后查詢計(jì)劃然后,判斷外層查詢與內(nèi)存查詢中相同的r_name='EUROPE'是否可以去掉其一,測試結(jié)果表明,去掉外層查詢中r_name='EUROPE'的表達(dá)式而保留內(nèi)層子查詢中的表達(dá)式時(shí)查詢結(jié)果相同,但保留外層查詢中的表達(dá)式而去掉內(nèi)層子查詢中的表達(dá)式時(shí)查詢結(jié)果不同,內(nèi)層子查詢中的表達(dá)式具有決定性作用52第3節(jié)查詢優(yōu)化案例分析最后,我們分析Q2嵌套查詢的執(zhí)行過程。將原始查詢Q2分解為一個外層查詢和一個內(nèi)層查詢,分別執(zhí)行兩個查詢,對比查詢結(jié)果集。--Q2outerqueryselects_acctbal,s_name,n_name,p_partkey,ps_supplycost,p_mfgr,s_address,s_phone,s_commentfrompart,supplier,partsupp,nation,regionwherep_partkey=ps_partkeyands_suppkey=ps_suppkeyandp_size=15andp_typelike'%BRASS'ands_nationkey=n_nationkeyandn_regionkey=r_regionkeyandr_name='EUROPE'orderbyp_partkey;--Q2innerqueryselectmin(ps_supplycost)asmin_ps_supplycost,p_partkeyfrompartsupp,supplier,nation,region,partwherep_partkey=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論