3.1mysql索引和查询优化---课程笔记
来源:互联网 发布:apache hadoop怎么用 编辑:程序博客网 时间:2024/05/02 12:57
什么是索引:
索引用于快速定位要查找的数据
数据库索引查找:
全表扫描vs索引查找
原理
1. 索引根据字母进行排序
innodb是通过主键ID定位。
2. 如何根据首字母找到所在行
InnoDB表聚簇索引
我们把根据主键排序的InnoDB表成为聚簇索引
把根据**排序的索引成为二级索引
索引相同根据ID的顺序进行排序
索引先根据name排序,name相同的情况下,根据age排序
索引维护
1. 索引维护由数据库自动完成
2. 插入/修改/删除每一个索引行都变成一个内部封装的实务
3.索引越多,事务越长,代价越高
4.索引越多对表的插入和索引字段修改就越慢
如何使用索引
1. 依据where查询条件建立索引
2. 排序order by,group by, distinct 字段添加索引
字段的选择性--某个字段其值的重复程度
1. 选择性很差的字段通常不适合创建单列索引
2. 联合索引中选择性好的字段应该排在前面
联合索引与前缀查询
1. 联合索引能为前缀单列,复列查询提供帮助
合理创建联合索引,避免冗余
3. 非常长的字段上建立索引影响性能
4. InnoDB索引单字段(utf-8)只能取前767bytes
5. 对长字段处理的方法
a.Email类,建立前缀索引
mail_addr varchar(2048)
idx_mailadd(Mail_addr(30))
b.住宅类,分拆字段
索引覆盖扫描
最核心sql考虑索引覆盖 e.g. username/pwd
不需要回表获取pwd字段,IO最小,效率最高
无法使用索引的情况
索引列进行数学运算或函数运算
未含复合索引的前缀字段
前缀通配,‘_’和'%'通配符
where 条件使用not,<>,!=
字段类型匹配
并不绝对,但是无法预测的会造成问题,不要使用
利用索引排序
如何确定一个查询走没走索引,走了哪个索引
explain是确定一个查询如何走索引最简便有效的方法
explain select * from tb_test;
type :查询access的方法
key:本次查询最终选择使用哪些索引,null为未使用索引
key_len:选择的索引使用的前缀长度或整个长度
rows:需要扫描的数据量
extra:主要指的是fetch data的具体方法
- 3.1mysql索引和查询优化---课程笔记
- Mysql索引和优化查询
- MySQL索引和优化查询
- MySQL索引和优化查询
- MySQL索引和优化查询
- MySQL索引和查询优化
- MySQL索引和查询优化
- MySQL索引和查询优化
- mysql查询和索引优化
- MySQL索引和查询优化
- MySQL索引和查询优化
- mysql索引和查询优化
- MySQL索引和查询优化
- MySQL索引和优化查询
- MySQL索引和查询优化
- Mysql的索引和查询优化
- MySQL索引和查询优化的实际操作
- Mysql的索引和慢查询优化
- HDU 2035 人见人爱A^B
- 为何三年来的一直喜欢编程的我没有学习的动力
- 4033: [HAOI2015]T1 树型DP
- if 条件语句的 “黄金大道法则”
- sublime快捷键一览表
- 3.1mysql索引和查询优化---课程笔记
- 深入理解maven及应用--要学的还很多
- P21 (*) Insert an element at a given position into a list.
- c语言成绩统计系统
- 解决Ora-28056问题
- Picture(HDOJ-2052)
- Spring4.0学习笔记007——AOP基础:动态代理、概念解析
- 2540--第一天--程序的流程分析(per)
- 【Android】intent action 跳转到系统使用,调用系统功能