新聞中心
現(xiàn)今的信息世界中,數(shù)據(jù)庫(kù)技術(shù)扮演著越來(lái)越重要的角色,極大地影響了現(xiàn)代社會(huì)的運(yùn)轉(zhuǎn)。而優(yōu)化數(shù)據(jù)庫(kù)性能則是在這些數(shù)據(jù)中最為關(guān)鍵的問(wèn)題之一,因?yàn)殡S著數(shù)據(jù)量的不斷增加,原本優(yōu)秀的性能也會(huì)逐漸變得不盡如人意,造成訪問(wèn)速度慢、響應(yīng)時(shí)間長(zhǎng)等問(wèn)題,從而影響企業(yè)的運(yùn)營(yíng)效率。對(duì)于這樣的問(wèn)題,掌握SQL中的with關(guān)鍵字技巧便是一個(gè)十分重要的解決辦法。

創(chuàng)新互聯(lián)公司專注于蘇州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開(kāi)發(fā)。蘇州網(wǎng)站建設(shè)公司,為蘇州等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
一、with關(guān)鍵字的基本概念
我們來(lái)認(rèn)識(shí)一下with關(guān)鍵字。在SQL中,with關(guān)鍵字原名為“公式名”,是一種創(chuàng)建臨時(shí)表格的方法。其語(yǔ)法形式如下:
with ( , … )
AS (
)
;
這段語(yǔ)句中的是一條標(biāo)準(zhǔn)的SELECT語(yǔ)句,如果它是常規(guī)SELECT語(yǔ)句的形式,則就是唯一的表格名稱。而與這個(gè)表格關(guān)聯(lián),這就相當(dāng)于一個(gè)標(biāo)準(zhǔn)的SELECT語(yǔ)句,可以從這個(gè)表格中檢索數(shù)據(jù)。
使用with關(guān)鍵字時(shí),我們可以通過(guò)建立臨時(shí)表格的方式,將計(jì)算開(kāi)銷較大的自查詢提出,避免自查詢引起的無(wú)謂的開(kāi)銷,提高性能。
二、應(yīng)用示例
接下來(lái),我們來(lái)看一個(gè)with關(guān)鍵字的應(yīng)用示例。
假設(shè)我們有一個(gè)員工薪資表salary,結(jié)構(gòu)如下:
salary(id, name, base, month)
現(xiàn)在,我們想通過(guò)計(jì)算查詢出所有員工的總薪資和平均薪資,并同時(shí)按不同月份進(jìn)行區(qū)分。此時(shí),我們可以采用常規(guī)的SELECT語(yǔ)句,如下所示:
SELECT
MONTH,
SUM(BASE),
AVG(BASE)
FROM
salary
GROUP BY
MONTH;
上面的語(yǔ)句在執(zhí)行時(shí),首先需要讀取salary表的數(shù)據(jù),然后再對(duì)讀取出來(lái)的所有數(shù)據(jù)進(jìn)行GROUP BY處理,這樣就會(huì)比較耗費(fèi)計(jì)算資源,降低查詢速度。此時(shí),我們可以通過(guò)使用with關(guān)鍵字來(lái)提高查詢效率。實(shí)現(xiàn)過(guò)程如下:
WITH
base_sum AS (SELECT MONTH, SUM(BASE) AS TOTAL FROM salary GROUP BY MONTH),
base_avg AS (SELECT MONTH, AVG(BASE) AS AVERAGE FROM salary GROUP BY MONTH)
SELECT
base_sum.MONTH,
base_sum.TOTAL,
base_avg.AVERAGE
FROM
base_sum
JOIN base_avg ON base_sum.MONTH = base_avg.MONTH;
上面的語(yǔ)句中,我們用到了兩個(gè)臨時(shí)表格base_sum和base_avg,用來(lái)分別計(jì)算每個(gè)月份的員工總薪資和平均薪資。同時(shí)我們進(jìn)行了JOIN操作來(lái)將兩個(gè)表格中的數(shù)據(jù)進(jìn)行對(duì)應(yīng)關(guān)聯(lián),實(shí)現(xiàn)了我們需要的結(jié)果。這個(gè)方法能夠使得查詢速度得到較大的提升。
三、with關(guān)鍵字與其他查詢技術(shù)的比較
到這里,你可能會(huì)問(wèn):這個(gè)方法好不好呢?會(huì)不會(huì)與其他的查詢方法形同虛設(shè)呢?
實(shí)際上,使用with關(guān)鍵字進(jìn)行查詢,效果還是非常不錯(cuò)的。與其他一些查詢方法相比,with關(guān)鍵字擁有以下幾個(gè)顯著的優(yōu)點(diǎn):
1.提高查詢性能
由于它使得將復(fù)雜的自查詢語(yǔ)句轉(zhuǎn)化為零散的小查詢語(yǔ)句成為可能,從而減少了數(shù)據(jù)庫(kù)操作的次數(shù),因此可以減少計(jì)算的開(kāi)銷,從而更快地獲取所需的數(shù)據(jù)。
2.使代碼更加易讀和易維護(hù)
with關(guān)鍵字可以將比較復(fù)雜的代碼塊拆分為多個(gè)部分,每個(gè)部分都可以進(jìn)行單獨(dú)的操作。這樣可以使得代碼的結(jié)構(gòu)更加優(yōu)雅易讀,也便于后續(xù)的代碼維護(hù)。
3.能夠重復(fù)使用
我們可以在查詢中多次使用臨時(shí)表格,從而可以避免多次執(zhí)行同樣的代碼塊。這樣,我們也可以得到更好的性能。
四、
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
SQL數(shù)據(jù)庫(kù)中臨時(shí)表,臨時(shí)變量和with as關(guān)鍵詞創(chuàng)建“臨時(shí)表”的區(qū)別
》臨時(shí)表:物理上存在的,使用時(shí)與正式表無(wú)差別;只是禪槐在會(huì)話結(jié)束時(shí),DBy引擎會(huì)將它自動(dòng)刪除;
》臨時(shí)變量:形式上是個(gè)變量,而賀首友不是表;同樣是在會(huì)話中有效;會(huì)話結(jié)束,就消失;
》WITH … AS是公共表達(dá)式(CTE)的語(yǔ)法表示,芹做它只是邏輯概念,沒(méi)有物理對(duì)象。
一個(gè)類似情況就是View(相對(duì)于Table),沒(méi)有物理對(duì)象。
但View至少還有定義存貯在DB系統(tǒng)表中,而CTE只是一種語(yǔ)法表示(僅在執(zhí)行時(shí)才會(huì)被解析、翻譯)。
如何閱讀Cognos生成的SQL
當(dāng)Cognos應(yīng)用時(shí)直接從關(guān)系數(shù)據(jù)庫(kù)讀取數(shù)據(jù)時(shí),通過(guò) Cognos ReportStudio 查看的到的SQL形式大致如下:
with “RPT_MON_DMS3” as (
select distinct *
from “RPT_HQ”.”RPT_MON_DMS”),
“期間” as (
select “RPT_MON_DMS3″.”RPT_MON” “RPT_MON”, “RPT_MON_DMS3″.”MON_NM” “MON_NM”, “RPT_MON_DMS3″.”YEAR_ID” “YEAR_ID”
from “RPT_MON_DMS3”
where “RPT_MON_DMS3”.”RPT_NM”=’RPT_PA_INDV_CUST_NO_FCT’)
select distinct “期間”.”YEAR_ID” “年key”, “期間”.”RPT_MON” “日key”, “慎滲期間”.”MON_NM” “New_Query_Item”
from “期間”
SELECT {….} DIMENSION PROPERTIES PARENT_LEVEL, CHILDREN_CARDINALITY ON AXIS(0) FROM
上面是一段典型的Cognos生成的SQL,with后面跟著兩個(gè)子查詢”RPT_MON_DMS3″和”期間” ,后面帶下劃線的是一段主查詢,這是一個(gè)單一SQL組成的查詢語(yǔ)句,此處的SQL也可能由多個(gè)語(yǔ)句組成,但是在語(yǔ)句和語(yǔ)句之間沒(méi)有明顯的分隔符號(hào),只能靠SQL語(yǔ)法來(lái)閱讀,由于Cognos生成的SQL一般帶有with關(guān)鍵字,而且一個(gè)SQL語(yǔ)句只有一個(gè)with關(guān)鍵字,因此可以從with關(guān)鍵字的出現(xiàn)來(lái)判斷SQL語(yǔ)句的間隔位置,如果這樣仍然不方便閱讀的話,可以使用TOAD等工具的格式化功能,可能更容易閱讀。
最后一段是Cognos的MDX多維查詢語(yǔ)句,此語(yǔ)句的產(chǎn)生,說(shuō)明最終的查詢結(jié)果是經(jīng)過(guò)了Cognos的本地處理過(guò)程而獲得的,即Cognos通過(guò)前面的一個(gè)或者多個(gè)SQL語(yǔ)句的查詢結(jié)果放在Cognos的對(duì)應(yīng)用服務(wù)器上,再通過(guò)Cognos的多維處理引擎處理,最終生成結(jié)果。一般這個(gè)MDX語(yǔ)句會(huì)出現(xiàn)在整個(gè)查詢語(yǔ)句的最后階段,并且該語(yǔ)句無(wú)法直接提交給關(guān)系數(shù)據(jù)庫(kù)執(zhí)行。
c#using和with的用法
1、using關(guān)鍵字用于管理對(duì)象閉塌舉的生命周期。一旦對(duì)象完成使用,便會(huì)自動(dòng)被銷毀,無(wú)需手動(dòng)釋放對(duì)象占用的資源。using語(yǔ)句通常用于操作需要釋放非托管資源(如文件、數(shù)據(jù)庫(kù)連接等)的類。
2、with關(guān)鍵字在C#語(yǔ)言中沒(méi)有特定的用途。在其他編程語(yǔ)言中,with一般用于簡(jiǎn)化代碼中的重復(fù)操轎碧作。但在C#中,with只是一個(gè)保留關(guān)鍵字,沒(méi)有實(shí)衫散際用途。
數(shù)據(jù)庫(kù)with關(guān)鍵字的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)with關(guān)鍵字,優(yōu)化數(shù)據(jù)庫(kù)性能:掌握with關(guān)鍵字技巧,SQL數(shù)據(jù)庫(kù)中臨時(shí)表,臨時(shí)變量和with as關(guān)鍵詞創(chuàng)建“臨時(shí)表”的區(qū)別,如何閱讀Cognos生成的SQL,c#using和with的用法的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
新聞標(biāo)題:優(yōu)化數(shù)據(jù)庫(kù)性能:掌握with關(guān)鍵字技巧(數(shù)據(jù)庫(kù)with關(guān)鍵字)
網(wǎng)頁(yè)地址:http://fisionsoft.com.cn/article/dphpsso.html


咨詢
建站咨詢
