python学习第41天

# 索引
# 认识mysql中的key
# index key 普通索引,能够加速查询,辅助索引
# unique key 唯一 + 索引,辅助索引
# primary key 唯一 + 非空 + 聚集索引
# 主键作为条件的查询如果能够让索引生效那么效率总是更高
# foreign key 本身没有索引的,但是它关联的外表中的字段是unique索引
# primary key 和unique 标识的字段不需要再添加索引
# 直接就可以利用索引加速查询
# 能用unique的时候尽量不用index
# unique除了是索引之外还能做唯一约束,如果做了唯一约束
# b+树就更健康
# 正确的使用索引
# 创建索引 creeat index 索引名 on 表名(字段名)
# 删除索引 drop index 索引名 on 表名

# 1.条件一定是建立了索引的字段,如果条件使用的字段根本就没有创建索引,那么索引不生效
# 2.如果条件是一个范围,随着范围的值逐渐增大,那么索引能发挥的作用也越小
# 3.如果使用like进行模糊查询,那么使用a%的形式能命中索引,%a形式不能命中索引
# 4.尽量选择区分度高的字段作为索引列
# 5.索引列不能在条件中参与计算,也不能使用函数
# 6.在多个条件以and相连的时候,会优点选择区分度高的索引列来进行查询
# 在多个条件以or相连的时候,就是从左到右依次判断
# 7.制作联合索引
# 1.最左前缀原则 a,b,c,d 条件是a的能命中索引,条件是a,b能命中索引,a,b,c能命中,a,c.... 只要没有a就不能命中索引
# 如果在联合查询中,总是涉及到同一个字段,那么就在建立联合索引的时候将这个字段放在最左侧
# 2.联合索引 如果按照定义顺序,从左到右遇到的第一个在条件中以范围为条件的字段,索引失效
# 尽量将带着范围查询的字段,定义在联合索引的最后面
# drop index
# 如果我们查询的条件总是多个列合在一起查,那么就建立联合索引
# create index ind_mix on s1(id,email)

# select * from s1 where id = 1000000 命中索引
# select * from s1 where email = 'eva1000000@oldboy' 未命中索引
# 但凡是创建了联合索引,那么在查询的时候,再创建顺序中从左到右的第一列必须出现在条件中
# select count(*) from s1 where id = 1000000 and email = 'eva10%'; 命中索引

# select count(*) from s1 where id = 1000000 and email like 'eva10%'; 可以命中索引
# 范围 :
# select * from s1 where id >3000 and email = 'eva300000@oldboy'; 不能命中索引
# 8.条件中涉及的字段的值必须和定义表中字段的数据类型一致,否则不能命中索引

# 关于索引的两个名词
# 覆盖索引 查一个数据不需要回表
# select name from 表 where age = 20 不是覆盖索引
# select age from 表 where age =20 是覆盖索引
# select count(age) from 表 where age =20 是覆盖索引
# 合并索引
# 当我们为单独的一列创建索引的时候
# 如果条件是这一列,且使用正确就可以命中索引
# 当我们为两列分别创建单独的索引的时候
# 如果这两列都是条件,那么可能只能命中期中一个条件
# 如果这两列都是条件,那么可能会命中两个索引 - 合并索引
# 我们为多列直接创建联合所以
# 条件命中联合索引

# 执行计划
# 看看mysql准备怎么执行这条语句 可以看到是否命中索引,计划能命中哪些,实际命中了哪些,执行的顺序,是否发生了索引合并,覆盖索引
# explain select * from s1;

# 数据库部分的拾遗
# pymysql
# 数据库备份和还原
# 使用事务和锁的方式来保证数据安全

猜你喜欢

转载自www.cnblogs.com/heimajia/p/10792588.html
今日推荐