數(shù)據(jù)庫(kù)的三級(jí)模式:
模式:是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述装盯,是所有用戶的公共數(shù)據(jù)視圖
外模式:用戶模式坷虑,他是數(shù)據(jù)庫(kù)用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征描述,與某一應(yīng)用有關(guān)埂奈,保證數(shù)據(jù)庫(kù)安全的一個(gè)強(qiáng)有力的措施
內(nèi)模式:又稱存儲(chǔ)模式迄损,他是描述數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述
外模式/模式:保證了數(shù)據(jù)與程序的邏輯獨(dú)立性(指當(dāng)總體邏輯結(jié)構(gòu)改變,通過對(duì)映像的相應(yīng)改變保持局部邏輯結(jié)構(gòu)的不變账磺,從而能應(yīng)用程序也可以不變)
模式/內(nèi)模式:可以在內(nèi)模式改變的情況下模式保持不變芹敌,從而應(yīng)用程序也不必改變
MySQL是只支持一種JOIN算法Nested-Loop Join(嵌套循環(huán)鏈接)
1.定義
Nested Loops也稱為嵌套迭代,它將一個(gè)聯(lián)接輸入用作外部輸入表(顯示為圖形執(zhí)行計(jì)劃中的頂端輸入)垮抗,將另一個(gè)聯(lián)接輸入用作內(nèi)部(底端)輸入表氏捞。外部循環(huán)逐行消耗外部輸入表。內(nèi)部循環(huán)為每個(gè)外部行執(zhí)行冒版,在內(nèi)部輸入表中搜索匹配行液茎。最簡(jiǎn)單的情況是,搜索時(shí)掃描整個(gè)表或索引辞嗡;這稱為單純嵌套循環(huán)聯(lián)接捆等。如果搜索時(shí)使用索引,則稱為索引嵌套循環(huán)聯(lián)接续室。如果將索引生成為查詢計(jì)劃的一部分(并在查詢完成后立即將索引破壞)栋烤,則稱為臨時(shí)索引嵌套循環(huán)聯(lián)接。偽碼表示如下:
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
三類:
? ? 1挺狰、Simple Nested-Loop Join(要對(duì)S表進(jìn)行RN次訪問明郭,效率低下)
? ? 2、Index Nested-Loop Join(如果非驅(qū)動(dòng)表的關(guān)聯(lián)鍵是主鍵的話丰泊,這樣來說性能就會(huì)非常的高)
? ? 3薯定、Block Nested-Loop Join
? ? ? ? ? Block Nested-Loop Join對(duì)比Simple Nested-Loop Join多了一個(gè)中間處理的過程,可以將多次比較合并到一次趁耗,降低了非驅(qū)動(dòng)表的訪問頻率沉唠,在MySQL當(dāng)中,我們可以通過參數(shù)join_buffer_size來設(shè)置join buffer的值苛败,然后再進(jìn)行操作
三種范式:
第一范式:字段不可分(通俗理解即一個(gè)字段只存儲(chǔ)一項(xiàng)信息)
第二范式:又逐漸,非主鍵字段依賴主鍵(通俗理解是任意一個(gè)字段都只依賴表中的同一個(gè)字段)
第三范式:非主鍵字段不能相互依賴(一張表最多只存兩層同類型信息)
1NF:原子性径簿,字段不可再分(所以會(huì)存在插入時(shí)異常)
2NF:唯一性罢屈,一個(gè)表只能說明一個(gè)事物
3NF:每列都與主鍵有直接關(guān)系,不存在傳遞依賴
反三范式
有時(shí)為了提高運(yùn)行效率篇亭,提高讀性能缠捌,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。
降低范式就是增加字段曼月,減少了查詢時(shí)的關(guān)聯(lián)谊却,提高查詢效率,因?yàn)樵跀?shù)據(jù)庫(kù)的操作中查詢的比例要遠(yuǎn)遠(yuǎn)大于DML的比例