create table t1(
id int primary key auto_increment, 設(shè)置了主鍵 id,如果通過(guò)id查找就會(huì)大量減少I(mǎi)O時(shí)間
name varchar(16) not null, 不能為空
sex enum('male','female') not null default 'male' 不能為空且默認(rèn)值為male
);
insert into t1(name) values('egon'),('lxx'),('alex');
創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的晉寧網(wǎng)站建設(shè)公司,晉寧接單;提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行晉寧網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
站在約束角度看primary key=not null unique
以后但凡建表,必須注意:
1、必須有且只有一個(gè)主鍵
2、通常是id字段被設(shè)置為主鍵
create table t5(
id int primary key auto_increment
);
1、被關(guān)聯(lián)的字段必須是一個(gè)key,通常是id字段
2、創(chuàng)建表時(shí):必須先建立被關(guān)聯(lián)的表,才能建立關(guān)聯(lián)表
(1)B+樹(shù)更適合外部存儲(chǔ)(一般指磁盤(pán)存儲(chǔ)),由于內(nèi)節(jié)點(diǎn)(非葉子節(jié)點(diǎn))不存儲(chǔ)data,所以一個(gè)節(jié)點(diǎn)可以存儲(chǔ)更多的內(nèi)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)能索引的范圍更大更精確。也就是說(shuō)使用B+樹(shù)單次磁盤(pán)IO的信息量相比較B樹(shù)更大,IO效率更高。
(2)mysql是關(guān)系型數(shù)據(jù)庫(kù),經(jīng)常會(huì)按照區(qū)間來(lái)訪(fǎng)問(wèn)某個(gè)索引列,B+樹(shù)的葉子節(jié)點(diǎn)間按順序建立了鏈指針,加強(qiáng)了區(qū)間訪(fǎng)問(wèn)性,所以B+樹(shù)對(duì)索引列上的區(qū)間范圍查詢(xún)很友好。而B(niǎo)樹(shù)每個(gè)節(jié)點(diǎn)的key和data在一起,無(wú)法進(jìn)行區(qū)間查找。
B+樹(shù)與B樹(shù)的不同在于:
(1)所有關(guān)鍵字存儲(chǔ)在葉子節(jié)點(diǎn),非葉子節(jié)點(diǎn)不存儲(chǔ)真正的data
(2)為所有葉子節(jié)點(diǎn)增加了一個(gè)鏈指針
局部性原理與磁盤(pán)預(yù)讀
為了提升效率,要盡量減少磁盤(pán)IO的次數(shù)。實(shí)際過(guò)程中,磁盤(pán)并不是每次嚴(yán)格按需讀取,而是每次都會(huì)預(yù)讀。磁盤(pán)讀取完需要的數(shù)據(jù)后,會(huì)按順序再多讀一部分?jǐn)?shù)據(jù)到內(nèi)存中,這樣做的理論依據(jù)是計(jì)算機(jī)科學(xué)中注明的局部性原理:
當(dāng)一個(gè)數(shù)據(jù)被用到時(shí),其附近的數(shù)據(jù)也通常會(huì)馬上被使用
程序運(yùn)行期間所需要的數(shù)據(jù)通常比較集中
(1)由于磁盤(pán)順序讀取的效率很高(不需要尋道時(shí)間,只需很少的旋轉(zhuǎn)時(shí)間),
因此對(duì)于具有局部性的程序來(lái)說(shuō),預(yù)讀可以提高I/O效率.預(yù)讀的長(zhǎng)度一般為頁(yè)(page)的整倍數(shù)。
(2)MySQL(默認(rèn)使用InnoDB引擎),將記錄按照頁(yè)的方式進(jìn)行管理,每頁(yè)大小默認(rèn)為16K(這個(gè)值可以修改)。linux 默認(rèn)頁(yè)大小為4K。
系統(tǒng)從磁盤(pán)讀取數(shù)據(jù)到內(nèi)存時(shí)是以磁盤(pán)塊(block)為基本單位的,位于同一個(gè)磁盤(pán)塊中的數(shù)據(jù)會(huì)被一次性讀取出來(lái),而不是需要什么取什么。
InnoDB存儲(chǔ)引擎中有頁(yè)(Page)的概念,頁(yè)是其磁盤(pán)管理的最小單位。InnoDB存儲(chǔ)引擎中默認(rèn)每個(gè)頁(yè)的大小為16KB,可通過(guò)參數(shù)innodb_page_size將頁(yè)的大小設(shè)置為4K、8K、16K,在MySQL中可通過(guò)如下命令查看頁(yè)的大小:
mysql> show variables like 'innodb_page_size';
分享標(biāo)題:key的作用
鏈接地址:http://www.chinadenli.net/article44/ieojhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站收錄、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)