数据库(五): 索引和数据库优化

/*
7>. 索引:
1. 索引的数据结构: B+
二分查找 + 平衡二叉树

2. 索引的最左匹配原则: 按照从左到右的顺序建立搜索树
(name,age,sex) 先比较name, 如果name相同则继续比较agesex, 直到得到数据
(age,sex) 不会按照最左匹配原则
(name,sex) 找到name, 然后获得该name的所有age, 再匹配sex

3. 聚集索引和辅助索引
聚集索引: 按照每张表的主键来构造搜索树, 每张表只有一个聚集索引
优点: 它对主键的排序查找和范围查找速度非常快
范围查询(range query
辅助索引: 非聚集索引, 辅助索引的叶子节点不包含行记录的全部数据
每张表上可以有多个辅助索引, 但只能有一个聚集索引

4. 常用的索引
1>>. 普通索引: 加速查询 INDEX (charger_id);
2>>. 唯一索引:
主键索引: 加速查找 + 约束(不能为空, 不能重复)
PRIMARY KEY
唯一索引: 加速查找 + 约束(不能重复)
UNIQUE INDEX (charger_id);

3>>. 组合索引: INDEX(id, name, age); // 效率比唯一索引低


5. 索引未命中:
1) like '%xx'
2) 定位条件使用函数
3 or: 从左到右依次执行
4) 定位条件与创建索引的类型不一样
5) !=, 定位范围过大
6) >
7) order by 选择的映射如果不是索引,则不走索引
8) 组合索引最左前缀失效

6. 覆盖索引:
即从辅助索引中就可以得到查询记录,而不需要查询聚集索引中的记录。 辅助索引大小远小于聚集索引, 因此可以减少大量的IO操作


索引设计原则:
1. 最适合的索引列, 出现在WHERE中和连接句子中的列
2. 使用唯一索引,索引列的基数越大,索引效果越好,因此往往用unique列做索引
3. 使用短索引,尽量缩短index(col(length))length
4. 使用组合索引
7. 索引合并:
索引合并,让一条sql可以使用多个索引。对这些索引取交集,并集,或者先取交集再取并集。
从而减少从数据表中取数据的次数,提高查询效率
*/

/*
数据库的优化方案:
1. 创建数据表时把固定长度的放在前面
2. 将固定数据放入内存: 例如:choice字段
3. 联合索引遵循最左前缀(从最左侧开始检索)
4. 避免使用 select *
5. 读写分离:利用数据库的主从进行分离:主,用于删除、修改更新;从,用于查
6. 分库: 当数据库中的表太多,将某些表分到不同的数据库
7. 分表:
水平分表:将某些列拆分到另外一张表,例如:博客+博客详情
垂直分表:讲些历史信息分到另外一张表中,例如:支付宝账单
8. 加缓存: 利用redismemcache (常用数据放到缓存里,提高取数据速度)
*/
posted @ 2019-05-13 16:59  lancelotxly  阅读(197)  评论(0编辑  收藏  举报