Mariadb 索引及外键
索引
索引相当于一本书的目录,在一个数据库或表有索引的情况下,会很便于查询数据,使查询更加效率,相对的也有缺点,不利于去修改,比较麻烦,有索引便于查询,那就意味着索引创建的越多越好么?然而并不是;索引越多,越不便于大量的修删改,反而会使数据库的性能下降;表里的数据如果大多数甚至只是是用来查询的话,那可以稍微的多创建几个索引以便于查询。
一、创建索引
&1 创建表 时 创建索引
create table create_index( id int primary key,name varchar(10) unique, age int,key (age) );
查看
&2给已有的表添加索引
create index test_index on students (name);
查看
注: 主键具有索引的功能, 所以设置索引不要在有主键的字段上
&删除索引
drop index 索引名字 on 表
二、测试时间
set profiling=1;#打开sql语句执行时间
show profiles;#查看sql执行时间
注: 真实环境下不要轻易去打开此功能,会使数据库的性能下降
1>插入数据
&准备数据(利用python 中 pymsql 模块实现 插入10万条数据)
2>执行脚本 ( 注, test2 数据库 与test3 表必须存在)( 第三方登录 事务默认自动打开,所以需要关闭 commit)
&
3>验证一下
十万条数据已经插入进去
#分页查看下
4>打开seq语句执行时间
5>测试
查询不带索引的字段
select * from test3 where name='name=0';
show proiflies;
给他添加索引再查看
#查看
#查看查询使用时间
会发现 带索引明显 查询要快的多
外键
如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)
对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错
注:设置外键的时候,一般是将范围较小的那个设置成外键( 谁是儿子谁是外键)
一、添加外键
1>
alter table students1 add consteaint 外键名称 foreign key 表字段(范围大) references 另一表字段(范围小)
2>插入一条数据测试
&测试
这是因为 classes(id) 为外键 关联着 students1 表, calsses 表里没有 id=3 所对应的数据, 所以不以为然的 students1 里也不能有clis(id)=3的数据 ,(外键约束)
&测试能否删除
外键约束不能删除,若想删除,则需要把students1 表里所有与 cls_id =1 对应的数据全部删除即
3>删除外键
4>添加支持级联删除的外键
&1测试
删除成功