数据库索引

1.索引

数据量很大 百万 千万,查询很频繁,修改不频繁。

核心目的,为了检索效率高。

单位:列,主键列,唯一列(unique),外键列 自动有索引。

适合做索引的数据列: 查询条件列(where) 分组条件列 排序条件列

索引的存储位置:在mysql的“data”目录中有诸多**数据库目录,其中存放的是数据库中所有表的文件,也包含索引文件**

索引的存储结构,要先了解 BTree


2. B-Tree

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJJZGjdy-1571482373410)(mdpic/20180605110842262.png)]


3. B+Tree

非叶子节点,不存数据,只存关键字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mi59FG7-1571482373411)(mdpic/20180605111409941.png)]


4. MyISAm引擎

采用B+tree,非聚集索引

非聚集索引的B+tree上,叶子节点存储的是“关键字”和“对应数据行的磁盘位置”,只存储索引,不支持事务管理和外键

非聚集索引在找到准确的叶子后,读取到的是 数据在磁盘的准确位置。


5. InnoDB引擎

采用B+tree,聚集索引

聚集索引的B+tree上,所有叶子节点存储是 ”关键字“和对应的“数据行”,存储的是索引和数据,支持事务管理和外键

聚集索引在找到准确的叶子后,读取到的是 对应行的完整数据。


6. 索引数据量级

6.1 节点大小

16kb

windows的4个page = mysql的一个page

mysql> show variables like '%page%';#查看mysql的pageSize

6.2 数据量

B+tree 一般都是 3层,千万级别的数据量


7. 主键选型

建表必须建主键,因为表格的数据都在主键索引树上。

如果没有主键,则mysql自动选择唯一列充当主键的作用。

如果也没有唯一列,则mysql自动创建一个伪列,充当主键。

主键类型,以具有 “单调性”的类型为最佳。

int/bigit auto_increment primary key


8. Explain

查看执行计划

mysql> explain select xxx,xxx,xx from t_user where ....; #查看执行计划,查看索引的使用情况,type=all代表全表扫描

9. 不适合建索引的列

**选择性**差的列,不建议建索引。

select count(distinct name)/count(1) from t_user;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值