1.索引树高度的影响因素? 如何解决?
a. 高度越低越好
b. 数据行越多,高度越高。
1. 分区表。一个实例里管理。
2. 按照数据特点,进行归档表。pt-archiver ##冷热数据分离,经常查询的数据和很长时间才查询一次的数据进行分离
3. 分布式中间件架构。针对海量数据、高并发业务主流方案。
4. 分布式数据库 ##自带分片功能的数据库
5. 在设计方面,满足三大范式。
c. 主键规划:长度过长。
1. 主键,尽量使用自增数字列。
d. 列值长度越长,数据量大的话,会影响到高度。
1. 使用前缀索引
100字符 只取前10个字符,构建索引树。
e. 数据类型的选择。
选择合适的、简短的数据类性。
例如:
1. 存储人的年龄 ,使用 tinyint 和 char(3)哪个好一些
2. 存储人名,char(20)和varchar(20)的选择哪一个好。
a. 站在数据插入性能角度思考,应该选:char
b. 从节省空间角度思考,应该选:varchar
c. 从索引树高度的角度思考,应该选:varchar
建议使用varchar类型存储变长列值。
2.如何查看索引的高度
level 0 第一层 level 1 第二层 level 2 第三层 ##索引树高度从0 开始0就是根节点依次类推
索引都在ibd文件中存储,在ibd文件中的某个数据页。
t100w ——->t100w.ibd ——>page ——-在数据页的某个位置写了索引树的高度?
在mysql当中对于每一个索引和每一个表都有一个全局唯一的id号,虽然有的表是重名的但是id号是唯一的。
1. 确认idx起始的数据页
mysql> desc information_schema.innodb_indexes;
select from information_schema.innodb_indexes where name=ide_num; ##找到table_id 这个是表的id号在查询这个id号是那张表
select from information_schema.innodb_tables ;这个是查找表的信息和id。
3.hexdump 工具介绍
3.1hexdump ##获取索引高度信息工具
. 获取索引树高度的信息
hexdump -s offset -n 10 xxxxx.ibd ## -s 跳过多少字节量 -n显示多长的数据
索引的应用
压测## 找一个字段不创建索引和创建索引分别做一次压测进行比对
source /root/t100w.sql
mysqlslap —defaults-file=/etc/my.cnf —concurrency=100 —iterations=1 —create-
schema=’test’ —query=”select from test.t100w where k1=’aa’” engine=innodb —
number-of-queries=2000 -uroot -p123 -verbose
—concurrency=100 : 模拟同时100会话连接
—create-schema=’test’ : 操作的库是谁
—query=”select from test.t100w where k2=’780P’” :做了什么操作
—number-of-queries=2000 : 一共做了多少次查询
查询索引的方式
desc t100w;
Key
PK —> 主键(聚簇索引)
MUL —> 辅助索引
UNI —> 唯一索引
mysql> show index from t100w;
