自適應哈希索引:InnoDB存儲引擎提出一種自適應哈希索引,存儲引擎會監(jiān)控對表上索引的查找,如果觀察到建立建立哈希索引會帶來速度的提升,則建立哈希索引,所以稱之為自適應的。自適應哈希索引只能用來搜索等值的查詢,如select * from table where index_col='***', 此外自適應哈希是由InnoDB存儲引擎控制的,我們只能通過innodb_adaptive_hash_index來禁用或啟用,默認開啟。
mysql 文件 參數(shù)文件:告訴Mysql實例啟動時在哪里可以找到數(shù)據(jù)庫文件,并且指定某些初始化參數(shù),這些參數(shù)定義了某種內存結構的大小等設置。用文件存儲,可編輯,若啟動時加載不到則不能成功啟動(與其他數(shù)據(jù)庫不同)。參數(shù)有動態(tài)和靜態(tài)之分,靜態(tài)相當于只讀,動態(tài)是可以set的。如我們通過show variable like '***'查出來的key、value值,是可以通過set key=value直接修改的。同是,修改時還有作用域之分,即這個seesion個有效和全局有效,在對應的key前加上session或global即可,如select @@seesion.read_buffer_size、set @@global.read_buffer_size。 日志文件:用來記錄Mysql實例對某種條件做出響應時寫入的文件。如錯誤日志文件、二進制日志文件、慢查詢日志文件、查詢日志文件等。 錯誤日志:通過show variables like 'log_error'來查看錯誤日志存放地址 慢查詢日志:通過show variables like '%long%' 查看慢查詢日志記錄的閾值,新版本設成了0.05;通過show variables like 'log_slow_queries'查看是否開啟了,默認為關閉的;通過show variabes like 'log_queries_not_using_indexes'查看是將沒有使用索引的查詢記錄到慢日志中。mysql中可以直接通過mysqldumpslow命令來查看慢日志。 二進制文件:不記錄查詢,只記錄對數(shù)據(jù)庫所有的修改操作。目的是為了恢復(point-in-time修復)和復制。通過show variables like 'datadir'查看存放路徑。二進制日志支持STATEMENT、ROW、MIX三種格式,通過binlog_format參數(shù)設定,通常設置為ROW,可以為數(shù)據(jù)庫的恢復和復制帶來更好的可靠性,但會帶來二進制文件大小的增加,復制時會增加網絡開銷。mysql中通過mysqlbinlog查看二進制日志文件內容。 socket文件:當用Unix域套接字方式進行連接時需要的文件。 pid文件:Mysql實例的進程ID文件。 Mysql表結構文件:用來存放Mysql表結構定義文件。因為Mysql插件式存儲引擎的體系結構,每個表都有一個對應的文件,以frm后綴結尾。 存儲引擎文件:存儲自己的文件來保存各種數(shù)據(jù),真正存儲了數(shù)據(jù)和索引等數(shù)據(jù)。下面主要介紹InnoDB的存儲引擎下的表空間文件和重做日志文件。 表空間文件:InnoDB默認的表空間文件為ibdata1,可通過show variables like 'innodb_file_per_table'查看每個表是否產生單獨的.idb表空間文件。但是,單獨的表空間文件僅存儲該表的數(shù)據(jù)、索引和插入緩沖等信息,其余信息還是存放在默認的表空間中。
mysql innodb常見索引與算法: B+樹索引:B+樹的數(shù)據(jù)結構相對較復雜,B代表的是balance最早是從平衡二叉樹演化而來,但B+樹并不是一個二叉樹,對其較詳細的介紹可以參見這篇文章: 由于B+樹索引的高扇出性,因此在數(shù)據(jù)庫中,B+樹的高度一般都在2~3層,也就對于查找某一鍵值的行記錄,最多只要2到3次IO,現(xiàn)在一般的磁盤每秒至少可以做100次IO,2~3次的IO意味著查詢時間只需0.02~0.03秒。