标签:mysql索引
*************************索引分类*************************
逻辑分类:
Single column indexes单列索引
Combined Indexes,Multiple-Column Indexes 多列索引
Unique 唯一索引
NonUnique 非唯一索引
物理存储分类:
clustered index 聚簇索引(主键和数据存放到一起)
not-clustered index非聚簇索引(普通索引)
数据结构分类:
BTREE索引,是B+树(B+ Tree)的简写
HASH索引(InnoDB是自适应哈希索引),只用于HEAP表
空间索引(5.6以前Myisam存储引擎支持,5.7InnoDB引入空间索引),很少用
Fractal Tree索引,用于TokuDB表
全文索引(5.6.10版本开始支持)
*************************B+TREE索引*************************
演化:二分查找->平衡二叉树->B树->b+树
介绍:所有记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接
插入操作:必须保证插入后叶子节点记录依然排序,需要考虑的几种情况
Leaf Page满 | Index Page满 | 操作 |
NO | NO | 直接将记录插入叶子节点 |
YES | NO | 1)拆分Leaf Page 2)将中间的节点放入到Index Page中 3)小于中间节点的记录放左边 4)大于或者等于中间节点的记录放到右边 |
YES | YES | 1)拆分Leaf Page 2)小于中间节点的记录放左边 3)大于或者等于中间节点的记录放到右边 4)拆分IndexPage 5)小于中间节点的记录放左边 6)大于中间节点的记录放右边 7)中间节点放入上一层IndexPage |
YES | 左右页节点未满 | 旋转,首先检查左兄弟节点,左兄弟节点如果未满,则移到左兄弟节点,这样做的好处是没必要做拆分 |
叶子节点小于填充因子 | 中间节点小于填充因子 | 操作 |
NO | NO | 直接将记录从叶子节点删除,如果该节点还是Index page的节点,那么则用该页节点的右节点替代 |
YES | NO | 合并叶子节点和它的兄弟节点,同时更新Index Page |
YES | YES | 1)合并叶子节点和他的兄弟节 点 2)更新index page 3)合并index page和它的兄弟节点 |
*************************B+TREE索引分类*************************
聚集索引:按照每张表的主键构造一颗B+TREE,叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。在InnoDB表中,可使用py_innodb_page_info工具来分析页,可看出索引是单独存放的一个页,该页储存键值以及指向数据页的偏移量。
非聚集索引:叶子节点不包含行记录的全部数据,叶子节点除了包含键值外,每个叶子节点中的索引行中还包含了聚集索引键,通过该聚集索引键可获取行内容。
*************************B+TREE索引管理*************************
创建索引语法:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option]
[algorithm_option | lock_option] ...
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT ‘string‘
algorithm_option:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
lock_option:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
或者
ALTER TABLE tbl_name
| ADD {INDEX|KEY} [index_name]
[index_type] (index_col_name,...) [index_option] ...
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT ‘string‘
查看表上索引信息:
mysql> show index from t1\G;
*************************** 1. row ***************************
Table: t1
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 9
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: t1
Non_unique: 1
Key_name: idx_name
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 9
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.02 sec)
ERROR:
No query specified
标签:mysql索引
原文地址:http://gaoquan.blog.51cto.com/4503718/1732823