什么是索引?
索引是系统内部自动维护的隐藏的数据表,它的作用是,可以极大地加快数据的查找速度
这个隐藏的数据表,其中的数据表,其中的数据是自动排好序的,其查找速度就是建立在这个基础上
人类思维类比
我们在解决问题,经常在大脑数据库中去寻找这个问题所涉及的知识和解决方案,工具,但我们的大脑毫无进展时,突然有某个东西的提示或者老师的提醒,我们醍醐灌顶,这个东东就是波利亚所说得进展标志,我把它称之为思维索引,用于快速解决问题方案。
建立索引,其实是指定一个表的某个或某些字段作为索引数据字段就可以了,
假设
索引类型
普通 :key 字段名 加快查找速度
唯一索引: unique key (字段名) 设定其字段值不能重复(唯一性)
主键索引: primary key(字段名) 是一个索引 而且还具有区分该表中任何一行数据的作用(其实也是唯一性,唯一性可以为空,主键不能为空)
例1商品相册的编号:img_id int unsigned not null auto_increment primary key comment '图片编号',
例2 用户表的用户编号: user_id int unsigned not null auto_increment primary key comment '用户编号',
例3用户收货地址表的地址编号: address_id int unsigned not null auto_increment primary key comment '地址编号',
例4地区表的地区ID:region_id smallint unsigned not null auto_increment primary key comment '地区ID',
例5 购物车表的购物id:cart_id int unsigned not null auto_increment primary key comment '购物车ID',
全文索引 fulltext (字段名)
外键索引 foreign key (字段名) references 其他表(对应其他中的字段名)
演示索引创建语法
create table tab_suoyin(
id int auto_increment,
user_name varchar(20),
email varchar(50),
key(email),/*这就是普通索引*/
primary key(id),/*这就是主键索引*/
unique key(user_name)/*这就是唯一索引*/
);
此时该表中如果以id,user_name或email做条件查找,就会很快,而以age做条件就会很慢
外键索引
是什么?
设定某个表的某个字段,它的数据值,必须是在另一个表中的某个字段f2中存在
学生主键 学号 姓名 班级号
1 10 周行知 501班
班级主键 班号 开班时间
501班 计算机技术 2019-1-30
怎么办?
create table banji(
id int auto_increment primary key,
banjihao varchar(10) unique key comment '班级号',
banzhuren varchar(10) comment '班主任',
open_date date comment '开班日期'
);
第二个表
create table student(
stu_id int auto_increment primary key,
name varchar(10),
age tinyint,
banji_id int comment '班级id',
foreign key(banji_id )references banji(id)
);
类比话术的外键索引
实际上人与人的沟通就像两个大型的数据库,对方的数据库存着一张当前话题切入的表,你也存在一张表,你聊天时卡壳了,对方可能某句话提醒你,我认为这句话就叫做外键索引,所以为什么与君一席话,胜读十年书?很简单,他会启发你有一个点子进行创造。
例如《少林足球》中一段对话:
黄金右脚:噢。真是天生神力。嗬,啐!(吐唾液到星驰腿上)好一条夺命香鸡腿!
星驰:我这是少林(的)大力金刚腿。
黄金右脚:功夫真的可以用来踢球啊!(外键索引)
星驰:嗯?!功夫踢球有搞头吗?
黄金右脚:有搞头!
星驰:对呀,功夫踢球,好主意!哎,为什么我一直没想到呢?!
create table 黄金右脚的大脑数据表(
腿 ----- 人类符号系统----- 幽默角度 -------夺命香鸡腿,
功夫踢球--------人类符号系统-----实用主义角度------搞头
);
create table 星驰的大脑数据表(
腿 ----- 人类符号系统----- 常识角度 -------少林(的)大力金刚腿,
功夫-------人类符号系统-------创新角度-----搞头,
foreign key(功夫 )references banji(功夫踢球)
);