MySQL——索引
定义
对数据库表的一列或者多列的值进行排序的一种结构(Btree方式)B树
传统B树的特点:
1.每一个节点能存储多个索引【包含数据】,由于该特征,促使树的高度比二叉树矮,从而降低了磁盘IO查找
2.由于每个节点存储了数据。。。
B+树
1.节点中只存储索引,不存储数据,从而单个节点能存储索引数量远远大于B树
2.数据均存储在叶子节点中,并且有序的相连【范围查找效果好】
优点
加快数据检索速度
例如,mysql有country数据库,库中有一个students表 插入100w条数据
id自增主键 name ‘Tom_%s’%(1)
缺点
占用物理存储空间(/var/lib/mysql)
当表中数据更新时,索引需要动态维护,降低数据维护速度。
索引示例
# cursor.executemany(SQL,[data1,data2,data3])
# 以此IO执行多条表记录操作,效率高,节省资源
1.开启运行时间检测
mysql>show variables like '%pro%';
mysql>set profiling=1;
2.执行查询语句(无索引)
select name from students where name = 'Tom99999';
3.查看执行时间
show profiles;
4.在name字段创建索引
create index name on students(name);
5.再执行查询语句
select name from students where name='Tom88888';
6.查看执行时间
show profiles;
索引分类
普通(MUL)and 唯一(UNI)
使用规则
1.可设置多个字段
2.普通索引:字段值没有约束,key标志位MUL
3.唯一索引(unique):字段不允许重复,但可以为NULL and KEY标志为UNI
4.哪些字段创建索引:经常用来查询的字段、where条件判断字段、order by排序字段
创建普通索引and唯一索引
创建表时
create table 表名(字段名 数据类型,
字段名 数据类型,
index(字段名),
index(字段名),
unique(字段名)
);
已有表中创建
create [unique] index 索引名 on 表名(字段名);
查看索引
1.desc 表名;--> KEY标志为:MUL、UNI
2.show index from 表名\G
删除索引
drop index 索引名 on 表名;
主键(PRI)and自增长(auto_increment)
使用规则
1.智能有一个主键字段
2.所带约束:不允许重复,且不能为NULL
3.KEY标志(primary):PRI
4.通常设置记录编号字段id,能唯一锁定一条记录
创建
创建表添加主键
create table student(
id int auto_increment,
name varchar(20),
primary key(id)
)charset=utf8,auto_increment=10000;##设置自增长起始值
已有表添加主键
alter table 表名 add primary key(id);
已有表操作自增长属性
1、已有表添加自增长属性
alter table 表名 modify id int auto_increment;
2、已有表重新指定起始值:
alter table 表名 auto_increment=20000;
删除
1、删除自增长属性(modify)
alter table 表名 modify id int;
2、删除主键索引
alter table 表名 drop primary key;