亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL簡介

MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為數(shù)據(jù)庫。

近年來,隨著MySQL的不斷發(fā)展,越來越多的互聯(lián)網(wǎng)公司也選擇了MySQ作為數(shù)據(jù)庫存儲,其中不乏一些大廠,說明MySQL越來越受開發(fā)者的青睞。

MySQL體系結(jié)構(gòu)

MySQL中一條SQL到底是如何執(zhí)行的?

 

  • Connectors組件提供對外的連接,供JDBC、ODBC、php、 Python等進行數(shù)據(jù)庫連接
  • 連接池組件(Connection Pool) 負(fù)責(zé)接收外部請求,將請求轉(zhuǎn)發(fā)到對應(yīng)的模塊,每個連接成功的請求都會分配一個線程來負(fù)責(zé)維護客戶端與MySQL服務(wù)器的連接,該線程負(fù)責(zé)接收客戶端的請求,返回結(jié)果給客戶端
  • 管理服務(wù)和工具組件(Management Service & Utilities)負(fù)責(zé)MySQL服務(wù)端的管理,如備份、恢復(fù)、安全、配置等
  • SQL接口組件(SQL Interface) 負(fù)責(zé)處理DML、DDL、存儲過程、觸發(fā)器等SQL操作,并返回結(jié)果
  • 查詢分析器組件(Parser) 分析SQL(檢查語法、合法性)
  • 優(yōu)化器組件(Optimizer) 優(yōu)化SQL命令進行標(biāo)準(zhǔn)的優(yōu)化分析
  • 緩沖組件(Caches & Buffers) 用于查詢數(shù)據(jù)的緩沖和緩存
  • 插件式存儲引擎(Pluggable Storage Engines) MySQL特有的特性,提供了各種類型的存儲引擎用于不同的業(yè)務(wù)場景
  • 物理文件(File System) 存儲MySQL 數(shù)據(jù)庫文件、日志文件、redo日志、Undo日志、索引等文件

MySQL區(qū)別于其他數(shù)據(jù)庫最重要的一個特點就是插件式存儲引擎

存儲引擎是底層物理結(jié)構(gòu)的實現(xiàn),每個存儲引擎開發(fā)者可以按照自己的意愿來進行開發(fā)

存儲引擎是基于表的,而不是數(shù)據(jù)庫。也就是同一個庫中的不同表可以采用不同的存儲引擎

存儲引擎的好處是,每個存儲引擎都有各自的特點,能夠根據(jù)具體的應(yīng)用建立不同存儲引擎表

MySQL存儲引擎

由于MySQL數(shù)據(jù)庫開源特性,產(chǎn)生了很多種不同的存儲引擎,下面來介紹幾種常用的存儲引擎

InnoDB存儲引擎

InnoDB存儲引擎支持事務(wù),其設(shè)計目標(biāo)主要面向在線事務(wù)處理(OLTP)的應(yīng)用

其特點是行鎖設(shè)計、支持外鍵,并支持類似于Oracle的非鎖定讀,即默認(rèn)讀取操作不會產(chǎn)生鎖

從MySQL數(shù)據(jù)庫5.5.8版本開始,InnoDB存儲引擎是默認(rèn)的存儲引擎

InnoDB通過使用多版本并發(fā)控制(MVCC)來獲得高并發(fā)性,并且實現(xiàn)了SQL標(biāo)準(zhǔn)的4種隔離級別,默認(rèn)為REPEATABLE級別。同時,使

用一種被稱為next-key locking的策略來避免幻讀(phantom)現(xiàn)象的產(chǎn)生。除此之外,InnoDB儲存引擎還提供了插入緩沖(insert

buffer)、二次寫(double write)、自適應(yīng)哈希索引(adaptive hash index)、預(yù)讀(read ahead)等高性能和高可用的功能

實際工作中,InnoDB應(yīng)該是用的最多的存儲引擎

MyISAM存儲引擎

MyISAM存儲引擎不支持事務(wù)、表鎖設(shè)計,支持全文索引,主要面向一些OLAP數(shù)據(jù)庫應(yīng)用

在MySQL 5.5.8版本之前MyISAM存儲引擎是默認(rèn)的存儲引擎(除windows版本外),5.5.8以后默認(rèn)存儲引擎就換成InnoDB

MyISAM存儲引擎表由MYD和MYI組成,MYD用來存放數(shù)據(jù)文件,MYI用來存放索引文件

注意 對于MyISAM存儲引擎表,MySQL數(shù)據(jù)庫只緩存其索引文件,數(shù)據(jù)文件的緩存交由操作系統(tǒng)本身來完成,這與其他使用LRU算法緩存

數(shù)據(jù)的大部分?jǐn)?shù)據(jù)庫大不相同。此外,在MySQL 5.1.23版本之前,無論是在32位還是64位操作系統(tǒng)環(huán)境下,緩存索引的緩沖區(qū)最大只能設(shè)置為4GB。在之后的版本中,64位系統(tǒng)可以支持大于4GB的索引緩沖區(qū)

NDB存儲引擎

NDB存儲引擎是一個集群存儲引擎,類似于Oracle的RAC集群,不過與Oracle RAC share everything架構(gòu)不同的是,其結(jié)構(gòu)是

sharenothing的集群架構(gòu),因此能提供更高的可用性

NDB的特點是數(shù)據(jù)全部放在內(nèi)存中(從MySQL 5.1版本開始,可以將非索引數(shù)據(jù)放在磁盤上),因此主鍵查找(primary key lookups)的

速度極快,并且通過添加NDB數(shù)據(jù)存儲節(jié)點(Data Node)可以線性地提高數(shù)據(jù)庫性能,是高可用、高性能的集群系統(tǒng)

關(guān)于NDB存儲引擎,有一個問題值得注意,那就是NDB存儲引擎的連接操作(JOIN)是在MySQL數(shù)據(jù)庫層完成的,而不是在存儲引擎層完成的。這意味著,復(fù)雜的連接操作需要巨大的網(wǎng)絡(luò)開銷,因此查詢速度很慢

Memory存儲引擎

Memory存儲引擎(之前稱HEAP存儲引擎)將表中的數(shù)據(jù)存放在內(nèi)存中,如果數(shù)據(jù)庫重啟或發(fā)生崩潰,表中的數(shù)據(jù)都將消失。它非常適合

用于存儲臨時數(shù)據(jù)的臨時表,以及數(shù)據(jù)倉庫中的緯度表。Memory存儲引擎默認(rèn)使用哈希索引,而不是我們熟悉的B+樹索引

雖然Memory存儲引擎速度非常快,但在使用上還是有一定的限制。比如,只支持表鎖,并發(fā)性能較差,并且不支持TEXT和BLOB列類型。

最重要的是,存儲變長字段(varchar)時是按照定常字段(char)的方式進行的,因此會浪費內(nèi)存

Archive存儲引擎

Archive存儲引擎只支持INSERT和SELECT操作,從MySQL 5.1開始支持索引。Archive存儲引擎使用zlib算法將數(shù)據(jù)行(row)進行壓縮后存儲,壓縮比一般可達1∶10。正如其名字所示,Archive存儲引擎非常適合存儲歸檔數(shù)據(jù),如日志信息。Archive存儲引擎使用行鎖來實現(xiàn)高并發(fā)的插入操作,但是其本身并不是事務(wù)安全的存儲引擎,其設(shè)計目標(biāo)主要是提供高速的插入和壓縮功能。

Federated存儲引擎

Federated存儲引擎表并不存放數(shù)據(jù),它只是指向一臺遠程MySQL數(shù)據(jù)庫服務(wù)器上的表。這非常類似于SQL Server的鏈接服務(wù)器和Oracle

的透明網(wǎng)關(guān),不同的是,當(dāng)前Federated存儲引擎只支持MySQL數(shù)據(jù)庫表,不支持異構(gòu)數(shù)據(jù)庫表。

Maria存儲引擎

Maria存儲引擎是新開發(fā)的引擎,設(shè)計目標(biāo)主要是用來取代原有的MyISAM存儲引擎,從而成為MySQL的默認(rèn)存儲引擎。

Maria存儲引擎的特點是:支持緩存數(shù)據(jù)和索引文件,應(yīng)用了行鎖設(shè)計,提供了MVCC功能,支持事務(wù)和非事務(wù)安全的選項,以及更好的BLOB字符類型的處理性能。

SQL是如何執(zhí)行的

一條查詢的SQL發(fā)送到MySQL服務(wù)器被執(zhí)行,返回查詢結(jié)果,這中間經(jīng)歷了什么?下面我們來看一下一條SQL語句從客戶端發(fā)送給MySQL服務(wù)器,MySQL到底執(zhí)行了哪些操作?

MySQL中一條SQL到底是如何執(zhí)行的?

 

如上圖所示

  • 客戶端SQL發(fā)送到MySQL服務(wù)端,首先會去查詢緩存里面查找,如果多次執(zhí)行同一個SQL是會命中緩存中,此時直接通過緩存來取數(shù)據(jù)
  • 若沒有命中查詢緩存,則將SQL發(fā)送給解析器,解析器會對SQL過行語法、語義分析,同時也會對SQL合法性進行校驗
  • SQL語義解析出來后,優(yōu)化器會對SQL語義進行優(yōu)化,比如,是走索引還是全表掃描,優(yōu)化器會根據(jù)實際情況來確定一個最優(yōu)的執(zhí)行方案(當(dāng)然,不一定是最優(yōu)的,只是給出MySQL認(rèn)為是最優(yōu)的執(zhí)行方案)
  • 優(yōu)化完畢后,就給到執(zhí)行器進行執(zhí)行SQL,取出SQL執(zhí)行結(jié)果
  • 最后將執(zhí)行結(jié)果返回給客戶端

簡單歸納一下,一條SQL在MySQL中的執(zhí)行過程如下:SQL ==> 查詢緩存 ==> 解析器 ==> 優(yōu)化器 ==> 執(zhí)行器

當(dāng)然,實際的過程遠遠比這個要復(fù)雜,這里只是列出來大致的步驟和過程,方便大家理解

分享到:
標(biāo)簽:MySQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定