数据表:studentinfo
CREATE TABLE `studentinfo` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`age` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`tel` bigint(11) NOT NULL,
`time` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`sid`),
KEY `index_name` (`name`),
KEY `index_student_info` (`name`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据表:index1
CREATE TABLE `index1` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`age` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`tel` bigint(11) NOT NULL,
`time` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据表:index2
CREATE TABLE `index2` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`info` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
索引:它是一种特殊的数据结构,它可以提高数据库的性能,用来快速查询 数据表中的特定记录。
概述:在mysql中,索引就是由数据表中的一列或者多列组合而成的,所以可以把一个或多个字段作为索引,通过设定所以我们可以快速的查找到某一条记录,而不是从头开始一直查找到所有的记录然后再找到对应的记录
优点:
提高检索速度
提高整体性能
缺点:
创建索引和维护耗费时间
索引占用物理空间
索引分类:
普通索引:不应用任何限制条件的索引,可以在任何数据类型中创建,字段本身的约束条件可以判断其值是否为空或者是唯一
唯一性索引:需要使用参数unique,索引的值必须是唯一的,通常是字段中的主键
全文索引:需要使用参数fulltext,全文索引只能在创建char型或varchar型或text类型的字段时使用,查询数量较大的时候使用全文索引可以提高查询速度
单列索引:就是指只对应一个字段的索引,使用单列索引的条件是只需要保证该索引值对应着一个字段就可以了
多列索引:是在表的多个字段上创建索引,用户可以通过多个字段进行查询
空间索引:使用spatial参数创建索引,它只是建立在空间数据类型上,用来提高获取空间数据的效率
创建索引:
创建表时创建索引:
Usage:
create table table_name( 属性名 数据类型[约束条件],属性名 数据类型[约束条件]...属性名 数据类型[UNIQUE | FULLTEXT | SPATIAL ] {INDEX|KEY} [别名]( 属性名1 [(长度)][ASC | DESC]));
example:
普通索引
create table score(id int(11) auto_increment primary key,name varchar(50) not null,englishi int(5) not null,math int(5) not null ,chinese int(5) not null, index(id));
查看:
show create table score;
唯一索引:
create table address(id int(11) auto_increment primary key,name varchar(50) not null,address varchar(255) not null,unique index address_id(id)); #创建唯一索引并命名为address_id
查看:
show create table score;
全文索引:
CREATE TABLE `cards` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL,`number` bigint(11) DEFAULT NULL,`info` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),FULLTEXT KEY `cards_info` (`info`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
单列索引:
CREATE TABLE `telephone` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`tel` varchar(50) NOT NULL,PRIMARY KEY (`id`),index `tel_num` (`tel`(20))) ENGINE=InnoDB DEFAULT CHARSET=utf8;
多列索引:
CREATE TABLE `information` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`sex` varchar(5) NOT NULL,`birthday` varchar(50) NOT NULL,PRIMARY KEY (`id`),KEY `info` (`name`,`sex`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
空间索引:
CREATE TABLE `list` (`id` int(11) NOT NULL AUTO_INCREMENT,`goods` geometry NOT NULL,PRIMARY KEY (`id`),SPATIAL KEY `listinfo` (`goods`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
已有表创建索引
examlpe:
create index stu_info on studentinfo(sid);
create unique index index1_id on index1(cid);
create fulltext index index2_info on index2(info);
create index index3_addr on index3(address(4)); #单列索引
create index index4_na on index4(name,address); #多列索引
修改表结果添加索引
删除索引:
example:
drop index index4_na on index4;