MySQL--三級(jí)模式、JOIN和范式

數(shù)據(jù)庫的三級(jí)模式:

模式:是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖


外模式:用戶模式,他是數(shù)據(jù)庫用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征描述,與某一應(yīng)用有關(guān),保證數(shù)據(jù)庫安全的一個(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ù)庫的操作中查詢的比例要遠(yuǎn)遠(yuǎn)大于DML的比例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MySQL技術(shù)內(nèi)幕:SQL編程 姜承堯 第1章 SQL編程 >> B是由MySQL創(chuàng)始人之一Monty分支的一個(gè)版...
    沉默劍士閱讀 2,636評(píng)論 0 3
  • 摘要:用事例和圖片簡(jiǎn)單的說明了mysql 中兩表join的算法,主要包括Nested-Loop Join Algo...
    暖夏未眠丶閱讀 975評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 她開車沒有聽電臺(tái)的習(xí)慣,只有在沒選擇時(shí)。 偶爾想來點(diǎn)新鮮,有點(diǎn)像是玩大轉(zhuǎn)輪,這個(gè)時(shí)候按下去,下一秒跳出來的會(huì)是什么...
    幺微閱讀 283評(píng)論 0 0
  • 腳本語言,你可能更需要的是 Lua 不同的腳本語言有不同的特性,第一接觸的腳本語言,可能會(huì)影響自己對(duì)整個(gè)腳本語言的...
    ios122閱讀 7,102評(píng)論 1 10

友情鏈接更多精彩內(nèi)容