最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【D1n910】(23/42) C++語(yǔ)言程序設(shè)計(jì) - MySQL數(shù)據(jù)庫(kù)學(xué)習(xí)筆記 2.6 索引、視圖

2023-04-19 19:30 作者:愛(ài)交作業(yè)的D1N910  | 我要投稿

正常操作,正常分析,大家好,我是D1N910,這是我觀看【MySQL數(shù)據(jù)庫(kù)】C++語(yǔ)言程序設(shè)計(jì) - MySQL數(shù)據(jù)庫(kù)的學(xué)習(xí)筆記。


之前的筆記內(nèi)容請(qǐng)看我的專欄。這里便不再累述了。


組成

Unit12 索引

01、索引

02、視圖


01)索引

1、索引的本質(zhì)是什么?

類似字典的音節(jié)表,目的是提高我們查詢的速度

索引就是數(shù)據(jù)庫(kù)中的表的一些值的復(fù)制。這些值稱為索引的關(guān)鍵字


2、MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)是如何檢索的?

MySQL 先按照索引關(guān)鍵字的值在索引表中查找,如果能找到,則能夠直接定位到數(shù)據(jù)所在的起始地方(這里需要 計(jì)算機(jī)組成原理、操作系統(tǒng) 的知識(shí))。如果沒(méi)有找到,那么需要進(jìn)行全表掃描,去查找到對(duì)應(yīng)的數(shù)據(jù)。

這里還是以字典查字為例子。如果我們知道一個(gè)英文字或者中文拼音、部首(相當(dāng)于關(guān)鍵字),那么可以在比較短的時(shí)間內(nèi)找到關(guān)鍵字,從而知道至少是從第幾頁(yè)開(kāi)始檢索!否則我們要從第一頁(yè)開(kāi)始找數(shù)據(jù)。


3、一個(gè)數(shù)據(jù)庫(kù)只能創(chuàng)建一個(gè)索引嗎?

—個(gè)數(shù)據(jù)庫(kù)表呢可以創(chuàng)建多個(gè)索引


4、索引可以是字段的組合嗎?

我們?cè)趧?chuàng)建索引的時(shí)候是可以是多個(gè)字段的組合的,這種情況稱為復(fù)合索引。

無(wú)論索引的關(guān)鍵字是一個(gè)字段還是多個(gè)字段的組合,這些字段必須來(lái)自于同一張表。

關(guān)鍵字值必須是同一張表中相應(yīng)字段值的拷貝。

數(shù)據(jù)庫(kù)為了提高查詢索引的效率,會(huì)對(duì)索引進(jìn)行排序。


5、可以跨表創(chuàng)建索引嗎?(創(chuàng)建一張索引,里面的字段是來(lái)自多張表)

這是不允許的。索引字段必須來(lái)自于同一張表。

?

6、索引需要額外的存儲(chǔ)空間嗎?

這是一定需要的。我們字典前邊加了這些呢查詢的方式的這些目錄一樣。(類似操作系統(tǒng)-分頁(yè)查詢。)

數(shù)據(jù)庫(kù)表的索引l關(guān)鍵字呢會(huì)經(jīng)過(guò)排序后存儲(chǔ)在外部存儲(chǔ)器里邊,為了提高效率,索引關(guān)鍵字經(jīng)常是排序的。


索引 ?? 日常使用的目錄


索引關(guān)鍵字的選取原則

  1. 表的某個(gè)字段值的離散度越高,該字段越適合選作索引的關(guān)鍵字。

    這里指重復(fù)的比較少。比如說(shuō)呢像性別字段就不適合創(chuàng)建使用它去創(chuàng)建索引,它的取值只有兩種。如果是身份證ID就很適合,因?yàn)槭俏ㄒ坏摹?/p>

  2. 占用存儲(chǔ)空間少的字段更適合選作索引的關(guān)鍵字。

    能用短的就不用長(zhǎng)的,比如我們只有六十萬(wàn)人,那么用唯一序號(hào)的話,會(huì)比用身份證號(hào)碼短很多。

  3. 存儲(chǔ)空間固定的字段更適合選作索引的關(guān)鍵字。

    比如 char 型就比varchar?型好。因?yàn)?char 型是定長(zhǎng)的。如果學(xué)過(guò)計(jì)算機(jī)組成原理,就可以知道這樣方便物理地址連續(xù)查找。

  4. where子句中經(jīng)常使用的字段、groud by分組字段或older by?排序字段、兩個(gè)表的連接字段應(yīng)該創(chuàng)建索引。

  5. 更新頻繁的字段不適合創(chuàng)建索引,不會(huì)出現(xiàn)在where子句中的字段不應(yīng)該創(chuàng)建索引。

  6. 最左綴原則。

  7. 盡量使用前綴索引。

    指我們?cè)谒饕龝r(shí),并不是把所有字段的值整體作為它的索引的關(guān)鍵字。類似我們查字典中查字典的時(shí)候所采用的部首檢字法。我們先找到部首,然后結(jié)合它剩余的部分的筆畫(huà)去查找該字所在的頁(yè)碼。

    對(duì)于數(shù)據(jù)庫(kù)而言,如果說(shuō)索引中關(guān)鍵的可以呢是索引關(guān)鍵字。

PS:索引選擇不好,會(huì)造成時(shí)間和空間的浪費(fèi),造成增刪改查時(shí)候效率降低。


索引和約束

  1. 系統(tǒng)會(huì)自動(dòng)為主鍵、唯一和外鍵字段創(chuàng)建聚集索引

    回顧約束:主鍵約束、唯一性約束、默認(rèn)約束、檢查約束、非空約束以及外鍵約束

    主鍵約束、唯一性約束以及外鍵約束與索引聯(lián)系緊密?

    約束:主要用于保證業(yè)務(wù)邏輯操作時(shí)數(shù)據(jù)的完整性;

    索引:將關(guān)鍵字?jǐn)?shù)據(jù)以某種數(shù)據(jù)結(jié)構(gòu)的方式存儲(chǔ)到外存

一個(gè)聚集索引的名字和主鍵約束名相同 —— primary

一個(gè)唯一性索引的名字和唯一性約束名相同

創(chuàng)建外鍵約束的同時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)普通索引,索引名與外鍵名相同

MySQL中,刪除了唯一性索引以后對(duì)應(yīng)的唯一性約束也將自動(dòng)刪除。


下面我們做個(gè)測(cè)試,下面的創(chuàng)建很多語(yǔ)法后面會(huì)講,實(shí)際上掌握一定的變成知識(shí)也能看得懂,先用著。

因?yàn)槭且话偃f(wàn)條數(shù)據(jù),所以創(chuàng)建的時(shí)候要非常久,大概10分鐘 —— 但是我的電腦還蠻好的,

用了一分半鐘多。

這么看的話確實(shí)是有了

查看一下表結(jié)構(gòu)

我們先用id查第五十萬(wàn)條數(shù)據(jù),啪一下就出來(lái)了,很快啊。只用了0.00 sec。我的是蘋(píng)果m1芯片的系統(tǒng),基本上是一下就出了。因?yàn)樘炝?,所以只展?0.00?sec。

現(xiàn)在改成用uid去查詢,因?yàn)閡id沒(méi)有建立索引,所以是一行一行去查的。

稍微等了一下。速度上是有影響了。


稍微等了一下。速度上是有影響了。


創(chuàng)建索引

????創(chuàng)建索引的方式有兩種:創(chuàng)建表的同時(shí)創(chuàng)建索引、在已有表上創(chuàng)建索引

????創(chuàng)建表的同時(shí)創(chuàng)建索引

????語(yǔ)法:

????在最后寫(xiě)上約束條件,中括號(hào)的是可選項(xiàng),unique|fultext都不寫(xiě)的話是普通索引;

????有 unique 是唯一索引;

????有?fultext 是全文索引;

????index 索引的關(guān)鍵字;

????最后是我們創(chuàng)建的索引名和索引的字段名;

????長(zhǎng)度,選擇前多少個(gè)字符去創(chuàng)建索引,即前綴索引


????在已有表上創(chuàng)建索引

????語(yǔ)法:

? ? 這里比上面多的一個(gè)內(nèi)容就是要說(shuō)明在那個(gè)表上建立索引。


任務(wù):在已有表上創(chuàng)建索引

上面會(huì)拷貝現(xiàn)有的 student 的表結(jié)構(gòu)和數(shù)據(jù)到 stu 中。

前情提要:如果只是想拷貝表結(jié)構(gòu),則用 like 關(guān)鍵字。 e.g.??

我們可以看到?stu 表是沒(méi)有索引的,因?yàn)閺?fù)制的時(shí)候唯一、非空等都不會(huì)復(fù)制過(guò)來(lái)。


現(xiàn)在在這個(gè) stu 表上添加索引。

?

查看到 student_no 現(xiàn)在增加了 PRI 在 Key 處?,F(xiàn)在已經(jīng)創(chuàng)建好了。


查看索引

????語(yǔ)法

????????show index from 表名\G;

????示例

????????show index from student\G;

這里還是用 show,然后 \G? 是為了說(shuō)明數(shù)據(jù)展出時(shí)是縱向展示結(jié)果

這是不用 \G 展示的


Non_unique: 0 # 即說(shuō)明不是唯一的為0,即就是唯一的,0代表真,1代表假。我們剛剛創(chuàng)建的是 unique 的,是唯一的。

如果可以有重復(fù)值,比如普通索引,那么這里就是1。

Seq_in_index # 索引的序列號(hào),這里是從1開(kāi)始

跟著是列和字段的名稱

Collation: A #指的是索引的存儲(chǔ)方式,a即 升序,NULL 則無(wú)分類

Cardinality: 6 #索引中唯一值的估計(jì)數(shù)量

Sub_part: NULL #長(zhǎng)度,選擇前多少個(gè)字符去創(chuàng)建索引,即前綴索引,如果沒(méi)有,則就是 NULL

Packed: NULL? # 表示如何被壓縮,NULL 表示沒(méi)有被壓縮

?Null:? # 字段是否允許有空值,允許則為 Yes

?Index_type: BTREE #這里的意思是使用樹(shù)的方式去創(chuàng)造索引


下面我們?cè)儆^察下之前創(chuàng)建的幾個(gè)表

學(xué)生表

可以看到?student_no 主鍵和?class_no 外鍵

這里可以看到出來(lái)了兩行的索引說(shuō)明。這可以看到 class_no 的 Non_unique 是 1,實(shí)際上就是不唯一。



考慮到一些索引添加了不僅沒(méi)能提高查找效率,反而降低了,那么要考慮刪除索引。

刪除索引

????語(yǔ)法

????示例

現(xiàn)在看到是沒(méi)有索引了


02)視圖 view

創(chuàng)建視圖

????視圖中保存的僅僅是一條select語(yǔ)句,該select語(yǔ)句的數(shù)據(jù)源可以是基表,也可以是另一個(gè)視圖。所以視圖是虛表。當(dāng)數(shù)據(jù)源發(fā)生變化,對(duì)應(yīng)視圖也會(huì)發(fā)生變化。

????創(chuàng)建視圖的語(yǔ)法格式如下:

????create view 視圖名[(視圖字段列表)]

????????as

????????????????select語(yǔ)句;

視圖字段列表 就是將來(lái)進(jìn)入視圖的時(shí)候,能看到的字段。通過(guò)這樣的方式可以隱藏原始表的列表。

注:視圖是引用基表的數(shù)據(jù),如果視圖的改變了,基表的也會(huì)改變的!

執(zhí)行SQL

現(xiàn)在我們進(jìn)行常用操作,比如查詢。能看到只有三項(xiàng)。


嘗試插入數(shù)據(jù)于視圖,發(fā)現(xiàn)原表也改變了。

修改、刪除等都是會(huì)同步的。這里要注意,操作時(shí)使用的字段名應(yīng)該是視圖中的字段名,否則會(huì)報(bào)錯(cuò)。


當(dāng)視圖的數(shù)據(jù)不是來(lái)自一張表,而是來(lái)自多張表,那么可能就不能進(jìn)行增刪改了。

下面創(chuàng)建表

下面創(chuàng)建視圖

嘗試插入數(shù)據(jù)于視圖

失敗了

嘗試刪除也提示不能刪除 join view 的數(shù)據(jù)

嘗試 update 成功了


不過(guò)可以看到這種情況雖然成功了,但是看起來(lái)是非常怪的,比如實(shí)際上cls就沒(méi)修改。


以后不要對(duì)視圖做這樣的操作了。


查看視圖

使用查看表結(jié)構(gòu)的方式查看視圖的定義

????desc 視圖名;

????MySQL命令 “show tables;"

????MySQL系統(tǒng)數(shù)據(jù)庫(kù)information_schema的views表存儲(chǔ)了所有視圖的定義,使用下面的

????????select語(yǔ)句可以查看所有視圖的詳細(xì)信息

????????????select * from information_schema.views\G;


作用

  1. 使操作變得簡(jiǎn)單

  2. 避免數(shù)據(jù)冗余

  3. 增強(qiáng)數(shù)據(jù)安全性

  4. 提高數(shù)據(jù)的邏輯獨(dú)立性

刪除視圖

如果某個(gè)視圖不再使用,可以使用drop view語(yǔ)句將其刪除,語(yǔ)法格式如下:

drop view 視圖名;

>例如,刪除available_course_view視圖,可以使用下面的語(yǔ)句:

恭喜我們,掌握了數(shù)據(jù)庫(kù)表的視圖部分!

我們的學(xué)習(xí)進(jìn)度為 23/42!

未完!繼續(xù)!

【D1n910】(23/42) C++語(yǔ)言程序設(shè)計(jì) - MySQL數(shù)據(jù)庫(kù)學(xué)習(xí)筆記 2.6 索引、視圖的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
亳州市| 常山县| 凤凰县| 黄梅县| 镇康县| 泸定县| 汕尾市| 武宣县| 民县| 贵港市| 湘西| 黔东| 前郭尔| 乌兰县| 哈巴河县| 秭归县| 康马县| 治县。| 台山市| 昆明市| 临邑县| 通许县| 宜州市| 苍南县| 盐源县| 龙州县| 普兰县| 镇雄县| 墨江| 长葛市| 五指山市| 双牌县| 饶平县| 曲阜市| 杨浦区| 鄂伦春自治旗| 通江县| 罗山县| 伊金霍洛旗| 慈溪市| 邹城市|