004 Mysql 索引

1、索引作用

提供了类似于书目录的作用,目的是为了优化查询

2、索引的种类(算法)

B树索引 (保证查找公平和快捷)

Hash索引

R树

Full text

GIS(地理位置)

3、B树 基于不同的查找算法分类介绍

 

从下向上分为叶子节点----指节点-----根节点

每个

B-tree

B+Tree 在范围查询方面提供了更好的性能(><>=<= like)

B*tree

4、在功能上的分类

4.1 辅助索引(S)怎么构建B树结构的?

(1)、索引是基于表中、列(索引键)的值生产的B树结构

(2)、首先提取此列所有的值进行自动排序

(3)、将排好序的值均匀的分布到索引树的叶子节点中(16K)

(4)、然后生产此索引键值所对应的后端数据叶的指针

(5)、生成枝节点和根节点,根据数据量级和索引键长度生成合适的索引树高度

id  name  age   gender

select * from t1 where id=10;

问题:基于索引键做where 查询,对于id列是顺序IO,但是其他的列是随机IO

补充:

辅助索引如何使用B树

1、取出ID列的所有值自动排序;

2、申请索引叶子节点数据页(16k),将有序的值存储到叶子节点的数据页中

3、申请枝节点和根节点数据页,将下层节点的最少值存储进去。

聚集(聚合)索引如何使用B

1、构建的提前是根据主键或唯一键,一般键表的时候我们指定pk,并且建议是数据列。

2、

聚集索引和辅助索引构成区别:

聚集索引只能有一个,非空唯一,一般是主键

辅助索引,可以有多个,是配合聚集索引使用的

聚集索引叶子节点就是磁盘的数据行存储的数据页

MySQL 是根据聚集索引,组织存储数据,数据存储时就是按照聚集索引的顺序进行存储数据;

辅助索引只会提取索引键值进行自动排序生成B树结构。

 

聚集索引和辅助索引怎样使用的?!!!!!

select id , name from std where name=xxx

查询过程:

1、先查找辅助索引(name)列,找到辅助索引的叶子节点中存储着(name=xxx的id号);

2、拿到name=xxx的 ID号,再到聚集索引中进行查询

3、按照name=xxx的id到聚集索引的叶子节点中读取数据;

 

存储时按照聚集索引进行数据排序;

辅助索引创建时会创建(辅助索引列与聚集索引列的对应关系)

辅助索引细分

1、普通的单列辅助索引

2、联合索引

      多个列为索引条件生成索引树,理论上设计的好可以减少大量的回表

     不同版本优化器还有差异。

3、唯一索引

六、索引的高度

一般情况下索引的高度控制在四层,一个表行数越多索引层数就会增大。一个表的行数超过千万级别就考虑分表。数据内容越大索引也会增大。

1、数据量级,解决方法:分表、分开、分布式

2、索引列值过长,解决方法:前缀索引

3、数据类型:

变长长度的字符串,使用了char。解决方案:变长字符串使用varchar

enum类型的使用enum(‘山东','河北','黑龙江','辽宁','山西’)

七、索引的基本管理

desc city;

show index from table_name;

show index from city;

alter table city add index idx_name(name);

alter table city drop index idx_name;

alter table city add idx_d_p(district,population);

show index from city;

alter table city add index idx_addr(addr(5));

在设计表时把需要的索引在见表时进行创建;

9、模拟数据库数据

创建100w测试数据

drop database if exists db1;

create database db1 charset utf8mb4 collate utf8mb4_bin;

use oldboy;

create table t_100w (id int,num int,k1 char(2),k2 char(4),dt timestamp);

delimiter//

create procedure rand_data(in num int)

begin

declare str char(62) default

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

declare str2 char(2);

declare str4 char(4);

declare i int default 0;

while i < num do

set

str2=concat(substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1));

set

str4=concat(substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),2));

set i=i+1;

insert into t_100w values (i,floor(rand()*num),str2,str4,now());

end while;

end;

//

delimiter;

#插入100w 条数据

call rand_data(1000000);

commit;

 

数据清洗:

1、统计

select population,count(id) from city group by population having count(id) order by count(id);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值