MYSQL索引的做用和建立

索引是查询优化最主要的方式;sql

查询方式:优化

一种是:全表扫描;spa

一种是:利用数据表上创建的因此进行扫描。指针

如:对表中name字段创建索引;则按照表中name字段进行索引排序,并为其创建指向数据表中记录所在位置的“指针”。code

Mysql索引根据用途分为:blog

1.普通索引:列值能够取空值或重复值。建立使用关键字INDEX或KEY;排序

2.惟一索引:列值不能重复;即索引列值必须是惟一的,但能够是空值;建立使用关键字UNIQUE;索引

3.主键索引:主键索引是系统自动建立的主键索引,而且是惟一的。与惟一索引区别是;列值不能为空ip

4.聚簇索引:就是数据存储的物理存储顺序,非聚簇索引就是索引顺序与数据的物理顺序无关。一个表只能有一个聚簇索引。目前只有InoDB和solidDB支持。rem

5.全文索引:只能建立在varchar或text的列上;创建全文索引可以在全文索引的列上进行查找。

(1)单列索引:就是一个索引只包含表中的一个列;比建立一个学号ID的索引;以name再建立一个姓名的单列索引。即每一个索引包含一个列。

(2)组合索引(复合索引或多列索引):就是表中的两个列或多个列来建立成一个索引;好比;以用户ID、用户名Name、用户年龄Age来建立的索引就是联合索引。

排序规则是;左前缀原则:即先按照用户ID,排序后;当第一列值相同的状况下;则按照用户名Name第二列判刑;依次类推。

 

CREATE TABLE `ik_admin` (
`userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(50) NOT NULL,
`password` varchar(256) NOT NULL,
`role_id` smallint(5) NOT NULL,
`last_ip` varchar(20) NOT NULL,
`last_time` int(10) NOT NULL DEFAULT '0',
`email` varchar(64) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`userid`), #表示主键默认是索引;并且不容许为空
UNIQUE KEY `user_name` (`username`) #惟一索引;改列不能重复;但能够为空
) ENGINE=MyISAM AUTO_INCREMENT=1002 DEFAULT CHARSET=utf8 COMMENT='管理员';

6.建立表索引语句:

 

 

 1 drop TABLE if exists my_test;
 2 create table my_test(
 3     id int(11) not null unique auto_increment,
 4     name varchar(10) not null default 0,
 5   age int(11) not null default 0
 6 ) engine=innodb charset=utf8;
 7 
 8 #查看表my_test的所有索引
 9 show index from my_test;
10 
11 #建立索引
12 create index index_n on my_test(name); #为表my_text中的列name建立普通索引名称index_n
13 create index index_age on my_test(age DESC); #为age作降序索引
14 create index index_age_name on my_test(age,name DESC);#创建表列age和name的联合索引;按照age升序后再按照name降序排序
15 
16 #删除索引
17 drop index index_n on my_test;
18 
19 #修改索引
20 alter table my_test drop index index_age;#删除索引
21 alter table my_test add index index_age(age);
相关文章
相关标签/搜索