一、索引的相关知识
简单来说,索引就是数据库的数据结构,进一步说就是该数据结构中存储了一张表中
某列
的所有值
索引的作用
如果没有索引,数据库会逐行查询
整张表
,就算找到要搜索的数据也会继续搜索,因为谁也不能保证数据是唯一的,这就是“全表扫描”
而索引的作用就是加快查询速度,从根本上减少需要扫描的记录的行数
建立索引会加快查询速度的原因
添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行就会非常快,所以其查询速度就会非常快。
- B+tree
其实就是
非二叉树
一个父结点可以有多个子结点,只有叶子结点才存储数据,其余的都可以是索引
关于树形结构这里不做过多解释
二、索引的创建等操作
索引的分类
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- 主键索引
普通索引
create index index_name on table(row)
drop index index_name on table;
show index fomr table;
唯一索引
create unique index index_name on table(row)
alter table table_name drop index index_name
主键索引
当一列被创建为主键,会自动创建主键索引
联合索引
create index index_name on table(row1,row2..)
三、索引的使用
验证索引是否被命中
explain select name from t1 where name='shark'\G
** EXPLAIN输出列**
柱 | JSON名称 | 含义 |
---|---|---|
id |
select_id |
该SELECT 标识符 |
select_type |
NULL | 该SELECT 类型 |
table |
table_name |
输出行的表 |
partitions |
partitions |
匹配的分区 |
type |
access_type |
连接类型 |
possible_keys |
possible_keys |
可供选择的索引 |
key |
key |
实际选择的指数 |
key_len |
key_length |
所选键的长度 |
ref |
ref |
列与索引进行比较 |
rows |
rows |
估计要检查的行 |
filtered |
filtered |
按表条件过滤的行的百分比 |
Extra |
NULL | 附加信息 |
四、索引过多的缺点
1.增加写的压力
2.增加MySQL查询优化器的选择时间
网友评论