Innodb 简介
Innodb 后台线程 (4个IO线程(read write) 1master线程 1锁监控线程 1错误控制线程)

show engine innodb status\G;
io_thread 分类(insert buffer thread ,log thread,read thread,write thread) 。

内存

show variables like “%buffer%”;
缓冲池 (innodb_buffer_pool_size) 重做日志缓冲池(innodb_log_buffer_size) 额外内存缓冲池 数据库是按页的方式读取到缓冲池中的(每页16K)采用LRU算法保留缓冲池的数据,文件修改的时候,首先修改缓冲池的页,发生修改后该页变成脏页,然后按照一定的频率刷到文件中

Total large memory allocated 27485798400
Dictionary memory allocated 13975613
Buffer pool size 1638300
Free buffers 1622413
Database pages 15758
Old database pages 5812
Modified db pages 501
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 3418, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 400, created 18637, written 119278
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 15758, unzip_LRU len: 30
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
缓冲池里面缓存的数据页的类型:索引页 数据页 undo页 插入缓冲 自适应哈希索引 Innodb存储信息 数据字典
日志缓冲: 将重做日志 先放入这个缓冲区 ,然后会定时刷入日志文件

master_thread(是主要的工作线程 后续分析)
关键特性(后续分析)

特性包括:插入缓冲 ,两次写(double write),自适应哈希索引

索引

常见的几种索引

  • B+ 树索引
  • 全文索引
    FULLTEXT(全文)索引,仅可用于MyISAM和InnoDB,针对较大的数据,生成全文索引非常的消耗时间和空间。对于文本的大对象,或者较大的CHAR类型的数据,如果使用普通索引,那么匹配文本前几个字符还是可行的,但是想要匹配文本中间的几个单词,那么就要使用LIKE %word%来匹配,这样需要很长的时间来处理,响应时间会大大增加,这种情况,就可使用时FULLTEXT索引了,在生成FULLTEXT索引时,会为文本生成一份单词的清单,在索引时及根据这个单词的清单来索引

SELECT * FROM table_name MATCH(ft_index) AGAINST(‘查询字符串’);

  • 哈希索引
    只有memory(内存)存储引擎支持哈希索引,哈希索引用索引列的值计算该值的hashCode,然后在hashCode相应的位置存执该值所在行数据的物理位置,因为使用散列算法,因此访问速度非常快,但是一个值只能对应一个hashCode,而且是散列的分布方式,因此哈希索引不支持范围查找和排序的功能。

忽视的问题:B+树索引不能给定一个键值就能找到具体的行 。而是找到行所在的页 。然后把页读到内存,再在内存中查找。
主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值;
普通索引 : 用表中的普通列构建的索引,没有任何限制
创建: CREATE INDEX indexName ON mytable(username(length));
修改:ALTER table tableName ADD INDEX indexName(columnName)
删除: DROP INDEX [indexName] ON mytable;
唯一索引:用来建立索引的列的值必须是唯一的,允许空值
创建:CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改:ALTER table mytable ADD UNIQUE [indexName] (username(length))
组合索引:用多个列组合构建的索引,这多个列中的值不允许有空值

查看表中索引
SHOW INDEX FROM tablename

索引的使用
*遵循“最左前缀”原则,把最常用作为检索或排序的列放在最左,依次递减,组合索引相当于建立了col1,col1col2,col1col2col3三个索引,而col2或者col3是不能使用索引的。