日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql索引与约束有什么关系_MySQL 约束与索引

發(fā)布時(shí)間:2024/9/19 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql索引与约束有什么关系_MySQL 约束与索引 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

約束

MYSQL不支持非主鍵的聚集索引。

PRIMARY KEY 不可空不可重復(fù),在一個(gè)表里可以定義聯(lián)合主鍵;

primary key = unique + not null

PRIMARY KEY是一個(gè)唯一KEY,此時(shí),所有的關(guān)鍵字列必須定義為NOT NULL。如果這些列沒(méi)有被明確地定義為NOT NULL,MySQL應(yīng)隱含地定義這些列。一個(gè)表只有一個(gè)PRIMARY KEY。如果您沒(méi)有PRIMARY KEY并且一個(gè)應(yīng)用程序要求在表中使用PRIMARY KEY,則MySQL返回第一個(gè)UNIQUE索引,此索引沒(méi)有作為PRIMARY KEY的NULL列。

KEY通常是INDEX同義詞。如果關(guān)鍵字屬性PRIMARY KEY在列定義中已給定,則PRIMARY KEY也可以只指定為KEY。這么做的目的是與其它數(shù)據(jù)庫(kù)系統(tǒng)兼容

desc tablename;

看到Key那一欄,可能會(huì)有4種值,即’啥也沒(méi)有’,’PRI’,’UNI’,’MUL’

1. 如果Key是空的, 那么該列值的可以重復(fù), 表示該列沒(méi)有索引, 或者是一個(gè)非唯一的復(fù)合索引的非前導(dǎo)列

2. 如果Key是PRI, 那么該列是主鍵的組成部分

3. 如果Key是UNI, 那么該列是一個(gè)唯一值索引的第一列(前導(dǎo)列),并別不能含有空值(NULL)

4. 如果Key是MUL, 那么該列的值可以重復(fù), 該列是一個(gè)非唯一索引的前導(dǎo)列(第一列)或者是一個(gè)唯一性索引的組成部分但是可以含有空值NULL

如果對(duì)于一個(gè)列的定義,同時(shí)滿足上述4種情況的多種,比如一個(gè)列既是PRI,又是UNI

那么”desc 表名”的時(shí)候,顯示的Key值按照優(yōu)先級(jí)來(lái)顯示 PRI->UNI->MUL 那么此時(shí),顯示PRI

一個(gè)唯一性索引列可以顯示為PRI,并且該列不能含有空值,同時(shí)該表沒(méi)有主鍵

一個(gè)唯一性索引列可以顯示為MUL, 如果多列構(gòu)成了一個(gè)唯一性復(fù)合索引

因?yàn)殡m然索引的多列組合是唯一的,比如ID+NAME是唯一的,但是沒(méi)一個(gè)單獨(dú)的列依然可以有重復(fù)的值

只要ID+NAME是唯一的即可

因此什么是聚集索引、什么是非聚集索引?

聚集索引和非聚集索引的根本區(qū)別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優(yōu)點(diǎn)是查詢速度快,因?yàn)橐坏┚哂械谝粋€(gè)索引值的紀(jì)錄被找到,具有連續(xù)索引值的記錄也一定物理的緊跟其后。

聚集索引的缺點(diǎn)是對(duì)表進(jìn)行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數(shù)據(jù)頁(yè)的相應(yīng)位置,必須在數(shù)據(jù)頁(yè)中進(jìn)行數(shù)據(jù)重排,降低了執(zhí)行速度。建議使用聚集索引的場(chǎng)合為:

a.此列包含有限數(shù)目的不同值;

b.查詢的結(jié)果返回一個(gè)區(qū)間的值;

c.查詢的結(jié)果返回某值相同的大量結(jié)果集。

非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都采用了B+樹(shù)的結(jié)構(gòu),但非聚集索引的葉子層并不與實(shí)際的數(shù)據(jù)頁(yè)相重疊,而采用葉子層包含一個(gè)指向表中的記錄在數(shù)據(jù)頁(yè)中的指針的方式。非聚集索引比聚集索引層次多,添加記錄不會(huì)引起數(shù)據(jù)順序的重組。建議使用非聚集索引的場(chǎng)合為:

a.此列包含了大量數(shù)目不同的值;

b.查詢的結(jié)束返回的是少量的結(jié)果集;

c.order by 子句中使用了該列。

--不用索引查詢

Select * FROM IndexTestTable WHIT(INDEX(0))

Where Status='B'

--創(chuàng)建聚集索引

Create CLUSTERED INDEX icIndexTestTable

ON IndexTestTable(Status)

--使用索引查詢

Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))

Where Status='B'

聚集索引確定表中數(shù)據(jù)的物理順序。聚集索引類(lèi)似于電話簿,按姓氏排列數(shù)據(jù)。由于聚集索引規(guī)定數(shù)據(jù)在表中的物理存儲(chǔ)順序,因此一個(gè)表只能包含一個(gè)聚集索引。但該索引可以包含多個(gè)列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣

非聚集索引與課本中的索引類(lèi)似。數(shù)據(jù)存儲(chǔ)在一個(gè)地方,索引存儲(chǔ)在另一個(gè)地方,索引帶有指針指向數(shù)據(jù)的存儲(chǔ)位置。索引中的項(xiàng)目按索引鍵值的順序存儲(chǔ),而表中的信息按另一種順序存儲(chǔ)(這可以由聚集索引規(guī)定)。

總結(jié)

以上是生活随笔為你收集整理的mysql索引与约束有什么关系_MySQL 约束与索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。