自適應哈希索引:InnoDB存儲引擎提出一種自適應哈希索引,存儲引擎會監控對表上索引的查找,如果觀察到建立建立哈希索引會帶來速度的提升,則建立哈希索引,所以稱之為自適應的。自適應哈希索引只能用來搜索等值的查詢,如select * from table where index_col='***', 此外自適應哈希是由InnoDB存儲引擎控制的,我們只能通過innodb_adaptive_hash_index來禁用或啟用,默認開啟。
mysql 文件 參數文件:告訴Mysql實例啟動時在哪里可以找到數據庫文件,并且指定某些初始化參數,這些參數定義了某種內存結構的大小等設置。用文件存儲,可編輯,若啟動時加載不到則不能成功啟動(與其他數據庫不同)。參數有動態和靜態之分,靜態相當于只讀,動態是可以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命令來查看慢日志。 二進制文件:不記錄查詢,只記錄對數據庫所有的修改操作。目的是為了恢復(point-in-time修復)和復制。通過show variables like 'datadir'查看存放路徑。二進制日志支持STATEMENT、ROW、MIX三種格式,通過binlog_format參數設定,通常設置為ROW,可以為數據庫的恢復和復制帶來更好的可靠性,但會帶來二進制文件大小的增加,復制時會增加網絡開銷。mysql中通過mysqlbinlog查看二進制日志文件內容。 socket文件:當用Unix域套接字方式進行連接時需要的文件。 pid文件:Mysql實例的進程ID文件。 Mysql表結構文件:用來存放Mysql表結構定義文件。因為Mysql插件式存儲引擎的體系結構,每個表都有一個對應的文件,以frm后綴結尾。 存儲引擎文件:存儲自己的文件來保存各種數據,真正存儲了數據和索引等數據。下面主要介紹InnoDB的存儲引擎下的表空間文件和重做日志文件。 表空間文件:InnoDB默認的表空間文件為ibdata1,可通過show variables like 'innodb_file_per_table'查看每個表是否產生單獨的.idb表空間文件。但是,單獨的表空間文件僅存儲該表的數據、索引和插入緩沖等信息,其余信息還是存放在默認的表空間中。
mysql innodb常見索引與算法: B+樹索引:B+樹的數據結構相對較復雜,B代表的是balance最早是從平衡二叉樹演化而來,但B+樹并不是一個二叉樹,對其較詳細的介紹可以參見這篇文章:http://blog.csdn.net/v_JULY_v/article/details/6530142 由于B+樹索引的高扇出性,因此在數據庫中,B+樹的高度一般都在2~3層,也就對于查找某一鍵值的行記錄,最多只要2到3次IO,現在一般的磁盤每秒至少可以做100次IO,2~3次的IO意味著查詢時間只需0.02~0.03秒。
鎖的算法: Record Lock:單行記錄上的鎖 Gap Lock:間隙鎖,鎖定一個范圍,但不包含記錄本身 Next-Key Lock:Gap Lock + Record Lock,鎖定一個范圍,并且鎖定記錄本身。更加詳細的介紹可以參見這篇blog,http://www.db110.com/?p=1848