- 記憶體的讀寫速度遠大于磁盤的讀寫速度,減少磁盤讀寫,可以作為重點優化方向,

- 資料庫內部最重要的就是存盤結構,存盤結構必然涉及到資料結構知識,比如用到了常用的哈希圖、樹,
- MYSQL資料庫常用兩種引擎,InnoDB、MyISAM,可以直接對表指定資料庫引擎,

- MYSQL索引是一種資料結構,幫助更快的查詢資料,索引使用的是B+樹(B樹改進版,一個節點可以包含多個值,深度可控,IO讀寫次數少,三層可以保存數千萬個值),葉子節點存值,其余節點存索引值,除此之外,一個節點可以存放多個連續地址的資料,可以符合訪問區域性原理,直接從快取取資料,速度非常快,減少磁盤IO,資料結構可視化工具:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

- MYSQL生成的表和資料會保存在mysql/data目錄下,并以表名生成對應的目錄,FRM檔案是表設計檔案,
- InnoDB引擎,會在mysql/data/表目錄下生成IBD檔案,IBD檔案包含索引和資料,索引是聚集型索引,
- MyISAM引擎,會在mysql/data/表目錄下生成MYI和MYD檔案,MYI是索引檔案,記錄存盤地址,MYD是資料檔案,索引是非聚集型索引,不支持事務,

- 使用索引注意事項:1>.不要在DML頻繁的表上加索引(一百萬條資料維護B+樹耗性能), 2>.不要在資料較少的表上加索引,3>.盡量不要在索引列上加函式計算, 4>.不要select *查詢,索引會失效,5>.在查詢比較頻繁的表上加索引,6>.在離散量比較大的欄位加索引(計算方法:count(distinct col):count(col)越大越好,如uuid,外鍵ID等),
- 盡量使用int自增作為主鍵,因為這樣符合陣列的特性,陣列查詢效率較高(訪問區域性原理,陣列記憶體地址連續,讀取一個扇區的資料放入二級快取即可,速度更快,不用反復查詢記憶體),
- InnoDB引擎創建的表,可以不設定主鍵,但是本身不能沒有主鍵,當不設主鍵的時候,會在表中找到非NULL并且設定為索引的欄位作為主鍵,如果找不到這樣的欄位,就用_rowid作為主鍵,這樣會導致查詢效率變差,1>全表掃描性能差,2>_rowid實作源自于全域的序列,這樣高并發插入資料共享此序列,MYSQL保證資料安全,會加上鎖,這必然導致性能降低,
- InnoDB引擎主鍵索引查詢時,會根據索引值直接在葉子節點拿到值,其他如欄位索引,會生成個B+樹,葉子節點保存本身索引值和主鍵值,再根據主鍵值回到主鍵索引B+樹中獲取真正的值(回表查詢),

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/42297.html
標籤:MySQL
下一篇:Redis五大資料型別詳解
