基于myisam存储引擎做报表、索引
(1)很多年前的报表系统:
(2)B-树
左边小,右边大,介于中间进入下一层
(3)B+树
非叶子节点,不存储data,只存储索引key
(4)b+树优化
叶子检点之间加顺序指针,方便范围查找
(5)myisam存储引擎的索引
数据文件和索引文件是分开的
(6)innodb存储引擎的索引
必须有主键,数据文件本身就是个索引文件,这个索引默认根据主键建立的,叫做聚簇索引
索引文件既是索引文件,又是数据文件,查找到索引位置,再取数据
对非主键字段建立的索引
name=索引 --> 叶子节点 --> 主键 --> 根据主键去找数据
备注:
1. 不要用长字符串字段做索引,会占用很大空间
2. 主键索引尽量设置 auto-increase
(7)索引的使用规则
select * from table where a=1 and b=2 and c=3,怎么建索引?
1. 会根据平时常用几个字段,建立一个联合索引
<1> 全列匹配
<2> 最左前缀匹配原则
<3> 前缀匹配 %
<4> 范围列匹配
<5> 包含函数
(8)索引的缺点和注意项
缺点:占用磁盘文件,高并发下频繁插入和修改索引会导致性能损耗
建议:尽量创建少的索引,一个表一两个索引
1. status就2个值0和1,建立索引,几乎跟全表扫描差不多
2. select count(distinct col)/count(*) 的占比
3. 长字符串字段,可以用前几个字符建立索引
(9)代码处理
尽量SQL语句单表查询,避开join,需要join时尽量在Java代码里处理
用mysql当在线即时存储,存数据,简单取数据,不要在mysql中进行计算