1.B+树索引
数据结构
B树就是平衡树,B+树就是B树以及叶子节点的顺序访问
操作
插入删除会破坏,需要合并旋转等操作去稳定
与红黑树比较
1.更少的查找次数
2.利用磁盘预读(顺序)
2.索引
红黑树索引
哈希索引:Inoodb有一个自适应哈希索引(某个索引被用的很频繁时)
全文索引:MyIsam就支持全文索引
3.索引优化
独立的列(所要搜索的列不可以成为表达式等)
多列(建立多列索引)
索引列的顺序(重要的放前面)
前缀索引(对于那些Varchar,text等)
覆盖索引(索引包含所有需要查询的值)
4.存储引擎
Inoodb,Mysql默认的搜索引擎,当它满足不了的时候才会用别的
是聚簇索引,带有查询目录的,避免直接读磁盘,对性能有很大提高
Myisam没带查询目录的非聚簇索引,支持空间数据所用GIS
比较
事务:inoodb是事务型的,支持回滚
外键
备份
其他特性
5.读写分离
主服务器处理写操作,从服务器处理读操作
从服务器可以使用Myisam引擎
6.实际sql代码书写
如果在同一个表中算学生的总分和平均成绩
SELECT name,kemu,grade,SUM(grade),AVG(grade) FROM study GROUP BY name
如果是两张表,一张学生的一张成绩的
SELECT s.name,g.kemu,g.grade,AVG(g.grade) FROM student AS s LEFT JOIN grade AS g ON s.name = g.name GROUP BY s.name
以上的科目没有分开,实现科目分离
SELECT s.id, s.name,
max(case when g.kemu=‘china’ then grade else 0 end) as 语文,
max(case when g.kemu=‘math’ then grade else 0 end) as 数学,
max(case when g.kemu=‘english’ then grade else 0 end) as 英语,
sum(grade) as 总分,
avg(grade) as 平均分
from student s LEFT JOIN grade g ON s.name = g.name
GROUP BY s.name