高效能MySQL 讀書筆記

2021-09-24 09:15:01 字數 2116 閱讀 2663

第4章 schema與資料型別優化

第5章 建立高效能的索引

三星索引

最左匹配原則

高效能索引策略

多列索引

mysql採用的是分層架構:上層是server層,下層是儲存引擎層。

sql標準中定義了四種隔離級別:

隔離級別

定義髒讀

不可重複讀

幻讀加鎖讀

讀未提交

read uncommitted, ru

可以讀到其他事務未提交的修改有有

有無讀提交read committed, rc

只能讀到其他事務已提交的修改無有

有無可重複讀

repeatable read, rr

通過mvcc,保證該事務過程中讀到的資料總是一致的無無

有無序列化讀

serializable

事務序列執行無無

無有其中可重複讀是預設隔離級別。

mysql採用預寫式日誌(write-ahead-logging, wal)機制,在修改資料時,只1)修改記憶體中的資料拷貝並2)記錄事務日誌並持久化到硬碟,從而提高效率。事務日誌採用追加寫的方式,順序io,效率高於直接修改資料的隨機io。

mysql中的事務日誌主要有:

innodb mvcc的實現,是通過儲存資料在某個時間點的快照來實現的。innodb在每行記錄後面都儲存兩個隱藏的列,其一儲存了行的建立時間,另一儲存了行的過期時間,其實際是系統的版本號。每開啟乙個事務,系統版本號就會自動遞增。

mysql親兒子,5.1版本前是預設引擎,支援全文索引,不支援事務、行鎖、崩潰恢復。

mysql乾兒子,支援mvcc,採用聚簇索引建表,5.1版本開始支援,5.5版本成為預設引擎。

可以通過如下命令檢視表使用的儲存引擎:

mysql>

show

table

status

like

'test' \g;**

****

****

****

****

****

****

*1.row***

****

****

****

****

****

****

name: test

engine: innodb..

.1rowin

set(

0.01 sec)

主要原則:

舉例:學生,課程,分數,教師,就不符合第二正規化,因為分數依賴學生-課程主鍵,但教師只依賴課程,需要拆分成兩個表:學生,課程,分數、課程,教師。

商品id,商品名,倉庫id,倉庫位址,就不符合第三正規化,因為主鍵為商品id,倉庫位址通過倉庫id依賴於商品id。

正規化的優點:

反正規化的優點:

b+tree實際上是乙個多叉搜尋樹,通過增加每個節點的扇出來降低數的高度。

b+tree和b-tree的區別在於:b+tree的資料都存在葉子節點上,因此非葉子節點占用空間更少,可以將其放在記憶體中,多次磁碟io。

回想一下上文的b+tree結構。

索引的搜尋,是從上至下,從左至右的。對於多列索引,先根據左側列排序,再根據右側列排序。因此,索引(a)(a,b)對如下查詢是等價的:

select

*from table_name where a =

0;

但索引(b,a)對上述查詢無效。

select actor_id from actor where actor_id +1=

5;

這個查詢其實等價於actor_id = 4,但mysql無法理解使用者行為。

字首索引:對應varchar等字串型別的變數,可以採用字首索引,類似於最左匹配原則。

高效能Mysql 讀書筆記

mysql與眾不同的特性是它的儲存引擎架構,這種架構將查詢處理即其他的任務系統和資料的儲存 提取相分離.第二層架構中,大多數的mysql的核心服務功能都在這一層,包括查詢解析,分析優化,快取以及所處的內建函式,所有的跨儲存引擎的功能都在這一層實現 儲存過程,觸發器,檢視等.第三層包含mysql的儲存...

高效能mysql讀書筆記1

譯者序言 本書的定位 系統的從各個方面講述乙個高效能mysq應用應該怎麼做,區別於市面上那些關於mysql開發書籍只是停留在學習mysql基本語句,本書提供了作者一些mysql調優的基準測試從而幫助理解mysql內部的工作機制,本書強調mysql的可用性 準確性以及效能。本書根據mysql5.0穩定...

高效能MYSQL讀書筆記1

一.1 每個 客戶端連線都會在伺服器程序中擁有乙個執行緒,這個連線的查詢只會在這個單獨的執行緒中執行,該執行緒只能輪流在某個cpu核心或者cpu中執行.伺服器會負責快取執行緒,因此不需要為每乙個新建的連線建立或銷毀執行緒.對於select語句,在解析查詢之前,伺服器會先檢查查詢快取,如果能在其中找到...