更新時(shí)間:2021-01-12 17:44:08 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1544次
MySQL作為目前最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,MySQL數(shù)據(jù)庫(kù)有著許多的特性,在這些特性之中,有一些光彩奪目的高級(jí)特性,為MySQL數(shù)據(jù)庫(kù)的強(qiáng)大功能實(shí)現(xiàn)貢獻(xiàn)了不菲的力量,本文我們就來(lái)一起看看這11個(gè)MySQL高級(jí)特性。
1.分區(qū)表
分區(qū)表是一種粗粒度的、簡(jiǎn)易的索引策略,適用于大數(shù)據(jù)量的過(guò)濾場(chǎng)景。最適合的場(chǎng)景是,在沒有合適的索引時(shí),對(duì)其中幾個(gè)分區(qū)進(jìn)行全表掃描,或者是只有一個(gè)分區(qū)和索引是熱點(diǎn),而且這個(gè)分區(qū)和索引都能夠在內(nèi)存中;限制單表分區(qū)數(shù)不要超過(guò)150個(gè),并且注意某些導(dǎo)致無(wú)法做分區(qū)過(guò)濾的細(xì)節(jié),分區(qū)表對(duì)于單條記錄的程序并沒有什么優(yōu)勢(shì),需要注意這類查詢的性能。
2視圖
對(duì)好幾個(gè)表的復(fù)雜查詢,使用視圖有時(shí)候會(huì)大大簡(jiǎn)化問題。當(dāng)視圖使用臨時(shí)表時(shí),無(wú)法將WHERE條件下推到各個(gè)具體的表,也不能使用任何索引,需要特別注意這類查詢的性能。如果為了遍歷,使用視圖是很合適的。
3.外鍵約束
外鍵限制會(huì)將約束放到MySQL中,這對(duì)于必須維護(hù)外鍵的場(chǎng)景,性能會(huì)更高。不過(guò)這也會(huì)帶來(lái)額外的復(fù)雜性和額外的索引消耗,還會(huì)增加多表之間的交互,會(huì)導(dǎo)致系統(tǒng)中有更多的鎖和競(jìng)爭(zhēng)。外鍵可以被看作是一個(gè)確保系統(tǒng)完整性的額哇的特性,但是如果設(shè)計(jì)的是一個(gè)高性能的系統(tǒng),那么外鍵就會(huì)顯得很臃腫了。很多人在更在意系統(tǒng)的性能的時(shí)候都不會(huì)使用外鍵,而是通過(guò)應(yīng)用程序來(lái)維護(hù)。
4.MySQL內(nèi)部存儲(chǔ)代碼
常用的方式有
1)存儲(chǔ)過(guò)程和函數(shù)
2)觸發(fā)器
可以在執(zhí)行INSERT、UPDATE或者DELETE的時(shí)候,執(zhí)行一些特定的操作??梢栽贛ySQL中指定是在SQL語(yǔ)句執(zhí)行前觸發(fā)還是在執(zhí)行后觸發(fā)。
3)事件
類似于LINUX的定時(shí)任務(wù),不過(guò)完全是在MySQL內(nèi)部實(shí)現(xiàn)。
4)在存儲(chǔ)過(guò)程中保留注釋
5.綁定變量
綁定變量的SQL語(yǔ)句:INSERT INTO tbl(col1, col2, col3) VALUES (?, ?, ?);。綁定變量的SQL,使用問號(hào)標(biāo)記可以接收參數(shù)的位置,當(dāng)真正需要執(zhí)行具體查詢的時(shí)候,則使用具體值代替這些問號(hào)。
6.插件
插件類型:
1)存儲(chǔ)過(guò)程插件
2)后臺(tái)插件
3)INFORMATION_SCHEMA插件
4)全文解析插件
5)審計(jì)插件
6)認(rèn)證插件
7.字符集和校對(duì)
字符集是一種字節(jié)到字符之間的映射,而校對(duì)規(guī)則是指一個(gè)字符集的排序方法。很多人都使用Latin1(默認(rèn)字符集,對(duì)英語(yǔ)和某些歐洲語(yǔ)言有效)或者UTF-8。如果使用的是UTF-8,那么在使用臨時(shí)表和緩沖區(qū)的時(shí)候需要注意:MySQL會(huì)按照每個(gè)字符三個(gè)字節(jié)的最大占用空間來(lái)分配存儲(chǔ)空間,這可能消耗更多的內(nèi)存或者磁盤空間。注意讓字符集和MySQL字符集配置相符,否則可能會(huì)由于字符集轉(zhuǎn)換讓某些索引無(wú)法正常工作。
8.全文索引
全文索引有著自己獨(dú)特的語(yǔ)法,沒有索引也可以工作,如果有索引效率會(huì)更高。
全文索引可以支持各種字符內(nèi)容的搜索,也支持自然語(yǔ)言搜索和布爾搜索。
9.分布式(XA)事務(wù)
很少會(huì)有人用MySQL的XA事務(wù)特性。除非你真正明白參數(shù)innodb_support_xa的意義,否則不要修改這個(gè)參數(shù)的值,并不是只有顯示使用XA事務(wù)時(shí)才需要設(shè)置這個(gè)參數(shù)。InnoDB和二進(jìn)制日志也是需要使用XA事務(wù)來(lái)做協(xié)調(diào)的,從而確保在系統(tǒng)崩潰的時(shí)候,數(shù)據(jù)能夠一致地恢復(fù)。
10.查詢緩存:
完全相同的查詢?cè)谥貜?fù)執(zhí)行的時(shí)候,查詢緩存可以立即放回結(jié)果,而無(wú)須在數(shù)據(jù)庫(kù)中重新執(zhí)行一次。根據(jù)經(jīng)驗(yàn),在高并發(fā)壓力環(huán)境中查詢緩存會(huì)導(dǎo)致系統(tǒng)性能的下降,甚至僵死。如果一定要使用查詢緩存,那么不要設(shè)置太大內(nèi)存,而且只有在明確收益的時(shí)候才使用。查詢緩存是一個(gè)非常方便的緩存,對(duì)應(yīng)用程序完全透明,無(wú)須任何額外的編碼,但是如果希望有更高效的查詢緩存,建議使用memacched等其他緩存方案。
11.游標(biāo)
MySQL在服務(wù)器中提供只讀的、單向的游標(biāo),而且只能在存儲(chǔ)過(guò)程或者更底層的客戶端API中使用。因?yàn)橛螛?biāo)中指向的對(duì)象都是存儲(chǔ)在臨時(shí)表中而不是實(shí)際查詢到的數(shù)據(jù),所以MySQL游標(biāo)總是可讀的。
以上就是關(guān)于11個(gè)mysql高級(jí)特性的介紹,這11個(gè)MySQL高級(jí)特性一起為MySQL數(shù)據(jù)庫(kù)的各個(gè)功能的實(shí)現(xiàn)奠定了基礎(chǔ)。想要深入了解這11個(gè)MySQL數(shù)據(jù)庫(kù)高級(jí)特性的小伙伴,觀看本站的MySQL教程,對(duì)每個(gè)MySQL高級(jí)特性都有深入的分析和講解。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)