mysql索引与约束

索引
索引在数据库表的字段上添加,是为了提高查询效率,一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加索引,索引相当于一本书的目录,是为了缩小扫描范围二存在

查找方式:全字典查找
第二种方式:索引,没有索引会全部查询一遍
注意:目录是排序的,排序了才会有区间查找,缩小扫描范围,就是缩小扫描区间
这个排序和treeset数据结构相同。Treeset(treemap)底层是一个自平衡的二叉树!在MySQL当中索引是一个b-tree数据结构
遵循左小右大。采用中序遍历方式遍历取数据
提醒:在任何数据库当中主键都会自动添加索引,id字段上上自动有索引,因为id是pk。另外在mysql上,一个字段上有unique约束,也会自动创建索引对象。
提醒2:在任何数据库当中,任何一张表的任何一条记录在硬盘储存上都有一个硬盘的物理存储编号。
提醒3:在mysql当中,索引是一个单独的对象,不同的存储引擎以不同的形式存在。在myisam,索引存储在一个.myi文件中。在innodb存储引擎中,索引存储在一个逻辑名称叫做tablespace的当中。在menmory存储引擎中索引存储在内存中。不管索引存储在哪里,索引在mysql当中都是一个数 的形式存在(自平衡二叉树)

什么条件下,加索引?
条件1:数据量庞大(硬件环境)
条件2:这个字段经常出现在where后面,以条件形式存在,这个字段经常扫描
条件3:该字段很少的dml操作(因为dml(insert delect update)之后,索引需要重新排序)
建议不要随便添加索引,因为索引需要维护的,太多的话是降低系统的性能。建议通过主键查询,或者unique约束的低端查询,效率是比较高的。
索引创建,删除
创建索引
Create index emp ename_index on emp(ename)
给emp表的ename字段添加索引,起名: emp_ename_index
删除索引
Drop index emp_ename_index on emp
给emp表的ename_index字段添加索引
查看索引
Explain select * from emp where ename = ‘king’
Type = ref 说明索引查询
Type = all 没有使用索引
哈希算法
数组+数的结合体
索引有失效的时候
1 模糊匹配当中以‘%’开头
尽量避免模糊查询以%’开头(优化手段)
2 使用or的时候,如果使用or,那么要求两边的字段都有索引,才会走索引。
建议采用union
3 使用复合索引,没有使用左侧的列查找,索引失效。
复合索引(多个索引一个字段)
4 在wehere当中索引参加了运算,索引失效。
5 在where当中索引使用了函数
索引分类:
单一索引:一个字段添加
复合索引:多个字段
主键索引:主键添加
唯一性索引:具有unique约束的字段上添加索引
注意:唯一性比较弱的字段上添加索引用处不打(可能存在大量的重复数据,索引不起太大的作用,越唯一,效率越高)

约束
在创建表的时候,给表中的字段加上约束,来保证这个表中的数据的完整性,有效性
约束包括
非空约束 not null
唯一性约束 unique 不能重复
Unique约束了,但是可以为null
两个字段联合具有唯一性
Create table lianhe(
Id varchar(255)
Idd varchari(255)
Unique(id, idd)
)a
在MySQL之中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段 oracle不一样
主键约束 PK、
主键约束
主键值是每一行记录的唯一标识
主键值是每行记录的身份证号
主键字段
主键值
任何表都有主键,没有主键值无效·
主键特征 不能为空 不能重复 一张表主键约束只能添加一个
单一主键 复合主键(在实际开发不介意使用复合主键,因为主键存在的兔兔就是这样记录的身份证号,只要意义达到即可,单一主键可以做到)
主键值建议使用 int bigint char 主键一般是数字,一般定长
主键分类: 自然主键 业务主键
在实际开发中使用业务主键多,还是使用自然主键多一些?
自然逐渐使用比较多,因为主键做到不重复就行,不需要有意义。业务主键不好,因为主键和业务挂钩,业务变动,影响主键值
Auto_increment 从一开始,以一自增

外键约束 fk
删除表的顺序
先删除子,再删除父
创建顺序相反,插入同之
Foreign key(cno)references t_class(class)
字段 引入表名 引入字段

检查约束 check mysql不支持 oracle支持
Sql脚本文件编写了大量的sql语句,执行sql脚本文件,会全部执行里面的sql语句
Source 路劲
Alter table 表名 add colunm 字段名 约束;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值