1.索引的概念---索引是一种有效组合数据的方式,通过索引可以快速的查找到数据库对象表中的特定记录。一个索引会包含表中按照一定顺序排序的一列或多列字段。由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构中(B-树或哈希表)。可将索引分为B型树索引和哈希索引。
MYSQL支持6种索引:普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引。
2.索引的基本操作---包括创建、查看和删除。
创建和查看索引——包括三种方法:创建表时创建索引、在已经存在的表中创建索引、通过SQL语句ALTER TABLE。
(1)创建普通索引:
普通索引:在创建索引时,不附加任何限制条件(唯一、非空等)。该类索引可以创建在任何数据类型的字段上。
创建表时创建普通索引:create table table_name(属性名 数据类型,属性名 数据类型 ....属性名 数据类型,index|key [索引名] (属性名1 [(长度)])【ASC|DESC】);
例:CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
INDEX index_deptno(deptno)
);
在以存在的表中创建普通索引:create index 索引名 on 表名 (属性名【(长度)】【AES|DESC】);
通过SQL语句创建普通索引:alter table table_name add index|key 索引名(属性名【(长度)】【AES|DESC】);
(2)创建唯一索引:
唯一索引:就是创建索引,限制索引的值必须唯一的。
创建表时创建唯一索引:create table table_name(属性名 数据类型,属性名 数据类型 ....属性名 数据类型, unique index|key [索引名] (属性名1 [(长度)])【ASC|DESC】);
例:CREATE TABLE t_dept(
deptno INT UNIQUE,
dname VARCHAR(20),
loc VARCHAR(40),
UNIQUE INDEX index_deptno(deptno)
);
在以存在的表中创建唯一索引:create unique index 索引名 on 表名 (属性名【(长度)】【AES|DESC】);
通过SQL语句创建唯一索引:alter table table_name add unique index|key 索引名(属性名【(长度)】;
(3)创建全文索引
全文索引:主要关联在数据类型为char、varchar和text的字段上,以便能够更加快速的查询数据量较大的字符串类型字段。只能在存储引擎为MyISAM的数据库表上创建。
创建表时创建全文索引:create table table_name(属性名 数据类型,属性名 数据类型 ....属性名 数据类型, fulltext index|key [索引名] (属性名1 [(长度)])【ASC|DESC】); 例:CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
FULLTEXT INDEX index_loc(loc)
) ENGINE=MyISAM;
在以存在的表中创建全文索引:create fulltext index 索引名 on 表名 (属性名【(长度)】【AES|DESC】);
通过SQL语句创建全文索引:alter table table_name add fulltext index|key 索引名(属性名【(长度)】;
(4)创建多列索引
多列索引:在创建索引时,所关联的字段不是一个字段,而是多个字段。
创建表时创建多列索引:create table table_name(属性名 数据类型,属性名 数据类型 ....属性名 数据类型, index|key [索引名] (属性名1 [(长度)])【ASC|DESC】,....属性名n [(长度)])【ASC|DESC】); 列:CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
KEY index_dname_loc(dname,loc)
);
在以存在的表中创建多列索引:create index 索引名 on 表名 (属性名【(长度)】【AES|DESC】,....属性名n [(长度)])【ASC|DESC】);
通过SQL语句创建多列索引:alter table table_name add fulltext index|key 索引名(属性名【(长度),....属性名n [(长度)])【ASC|DESC】】;
删除索引:drop index index_name on table_name;