云數(shù)據(jù)庫(kù)GaussDB 查詢(xún)表
· SELECT語(yǔ)句中禁用慎用通配符字段“*”。
使用通配符字段查詢(xún)表時(shí),如果因業(yè)務(wù)或數(shù)據(jù)庫(kù)升級(jí)導(dǎo)致表結(jié)構(gòu)發(fā)生變化,可能出現(xiàn)與業(yè)務(wù)語(yǔ)句不兼容的情況。 因此業(yè)務(wù)應(yīng)指明所需查詢(xún)的表字段名稱(chēng),避免使用通配符。
· 帶有LIMIT的查詢(xún)語(yǔ)句中必須帶有ORDER BY保證有序。
說(shuō)明:GaussDB是一種分布式數(shù)據(jù)庫(kù),表數(shù)據(jù)將分布在多個(gè)DN上。
如果SQL語(yǔ)句中只帶有LIMIT,而不帶有ORDER BY子句,數(shù)據(jù)庫(kù)將會(huì)把網(wǎng)絡(luò)傳輸較快的DN所發(fā)送的(符合查詢(xún)要求的)結(jié)果作為最終結(jié)果輸出到客戶(hù)端。
由于網(wǎng)絡(luò)傳輸效率不同時(shí)刻可能發(fā)生改變,因此導(dǎo)致多次執(zhí)行該SQL語(yǔ)句時(shí),返回結(jié)果表現(xiàn)出不一致的情況。
· 避免對(duì)大字段(如VARCHAR(2000))執(zhí)行ORDER BY、DISTINCT、GROUP BY、UNION等會(huì)引起排序的操作。
此類(lèi)操作將消耗大量的CPU和內(nèi)存資源,執(zhí)行效率低下。
· 禁止使用慎用LOCK TABLE語(yǔ)句加鎖,僅允許應(yīng)考慮使用 SELECT .. FOR UPDATE語(yǔ)句。
LOCK TABLE提供多種鎖級(jí)別,但如果對(duì)數(shù)據(jù)庫(kù)原理和業(yè)務(wù)理解不足,誤用表鎖可能觸發(fā)死鎖,導(dǎo)致集群不可用。
· 避免在SELECT目標(biāo)列中使用子查詢(xún),可能導(dǎo)致計(jì)劃無(wú)法下推到DN執(zhí)行,影響執(zhí)行性能。
· 考慮使用UNION ALL,少使用UNION,注意考慮去重。
UNION ALL不去重,少了排序操作,速度相對(duì)UNION更快。
如果沒(méi)有去重的需求,優(yōu)先使用UNION ALL。
· 需要統(tǒng)計(jì)表中所有記錄數(shù)時(shí),不要使用count(col)來(lái)替代count(*)。count(*)會(huì)統(tǒng)計(jì)NULL值(真實(shí)行數(shù)),而count(col)不會(huì)統(tǒng)計(jì)。
· 在執(zhí)行count(col)時(shí),將“值為NULL”的記錄行計(jì)數(shù)為0。在執(zhí)行sum(col)時(shí),當(dāng)所有記錄都為NULL時(shí),最終將返回NULL;當(dāng)不全為NULL時(shí),“值為NULL”的記錄行將被計(jì)數(shù)為0。
· count(多個(gè)字段)時(shí),多個(gè)字段名必須用圓括號(hào)括起來(lái)。例如,count( (col1,col2,col3) )。注意:通過(guò)多字段統(tǒng)計(jì)行數(shù)時(shí),即使所選字段都為NULL,該行也被計(jì)數(shù),效果與count(*)一致。
· count(distinct col)用來(lái)計(jì)算該列不重復(fù)的非NULL的數(shù)量, NULL將不被計(jì)數(shù)。
· count(distinct (col1,col2,...))用來(lái)統(tǒng)計(jì)多列的唯一值數(shù)量,當(dāng)所有統(tǒng)計(jì)字段都為NULL時(shí),也會(huì)被計(jì)數(shù),同時(shí)這些記錄被認(rèn)為是相同的。
· 使用連接操作符“ ||”替換concat函數(shù)進(jìn)行字符串連接。因?yàn)閏oncat函數(shù)生成的執(zhí)行計(jì)劃不能下推,導(dǎo)致查詢(xún)性能?chē)?yán)重劣化。
· 當(dāng)in(val1, val2, val3…)表達(dá)式中字段較多時(shí),建議使用in (values(va11), (val2),(val3)…)語(yǔ)句進(jìn)行替換。優(yōu)化器會(huì)自動(dòng)把in約束轉(zhuǎn)換為非關(guān)聯(lián)子查詢(xún),從而提升查詢(xún)性能。
· 避免頻繁使用下使用count()獲取大表行數(shù),該操作資源消耗較大,影響并行作業(yè)執(zhí)行效率。
如果不需要實(shí)時(shí)的行數(shù)統(tǒng)計(jì)信息,可以嘗試使用如下語(yǔ)句來(lái)獲取表行數(shù)。
SELECT reltules FROM pg_class WHERE relname = 'tablename';
須知:
pg_class中所記錄的表行數(shù)信息只會(huì)在對(duì)該表執(zhí)行ANALYZE以后才會(huì)更新。
目前ANALYZE有兩種觸發(fā)條件:
1)業(yè)務(wù)主動(dòng)發(fā)送ANALYZE語(yǔ)句,例如:
--分析連接庫(kù)中所有表
ANALYZE;
--分析指定表
ANALYZE tablename;
2)助AUTO VACCUUM機(jī)制,在每間隔一定時(shí)間或表的增刪達(dá)到一定行數(shù)時(shí)觸發(fā)。間隔時(shí)間和增刪比例可通過(guò)GUC參數(shù)設(shè)置。
云數(shù)據(jù)庫(kù)GaussDB優(yōu)勢(shì)
GaussDB數(shù)據(jù)庫(kù)具有高性能、高可用、高安全、低成本的特點(diǎn)
云數(shù)據(jù)庫(kù)GaussDB優(yōu)勢(shì)
GaussDB數(shù)據(jù)庫(kù)具有高性能、高可用、高安全、低成本的特點(diǎn)
優(yōu)勢(shì)詳情
-
1
高安全
GaussDB擁有TOP級(jí)的商業(yè)數(shù)據(jù)庫(kù)安全特性:數(shù)據(jù)動(dòng)態(tài)脫敏,TDE透明加密,行級(jí)訪問(wèn)控制,密態(tài)計(jì)算。
能夠滿(mǎn)足政企&金融級(jí)客戶(hù)的核心安全訴求。
-
2
健全的工具與服務(wù)化能力
GaussDB已經(jīng)擁有華為云,商用服務(wù)化部署能力,同時(shí)支持DAS、UGO、DRS等生態(tài)工具。
有效保障用戶(hù)開(kāi)發(fā)、運(yùn)維、優(yōu)化、監(jiān)控、遷移等日常工作需要。
-
3
全棧自研
GaussDB基于鯤鵬生態(tài),是當(dāng)前國(guó)內(nèi)唯一能夠做到全棧自主可控的國(guó)產(chǎn)品牌。
同時(shí)GaussDB能夠基于硬件優(yōu)勢(shì)在底層不斷進(jìn)行優(yōu)化,提升產(chǎn)品綜合性能。
-
4
開(kāi)源生態(tài)
GaussDB已經(jīng)支持開(kāi)源社區(qū),并提供主備版版本下載。