为什么要创建索引?
在此本人也带着相同的疑问,能够解释的仅仅是:为了减少数据库查询时所需要的速度。如果正常查询和索引查询所需时间相差很多倍时我们自然是需要索引的了。
想要知道结果,只能等我学得更加深入一点咯。
创建索引
创建索引有三种方法:(1)在创建表时创建索引; (2)使用ALTER TABLE 语句创建索引;(3)使用CREATE INDEX语句创建索引。
创建索引的类型有:普通索引(INDEX),唯一索引(UNIQUE INDEX),全文索引(FULLTEXT INDEX),空间索引(SPATIAL INDEX);其中全文索引,空间索引必须在MyISAM存储引擎下创建,且全文索引必须在数据类型为:CHAR、VARCHAR和TEXT的列上建立。
下面进行举例:
一、创建表时创建索引
1、创建普通索引
CREATE TABLE T1 ( id INT NOT NULL, name CHAR(50) NULL, INDEX SingleIdx(name) )
创建普通索引的语句为INDEX [索引名](列名),其中列名可以为多个,即以多个关键字创建索引。
2、创建唯一索引
CREATE TABLE T1 ( id INT NOT NULL, name CHAR(30) NOT NULL, UNIQUE INDEX UniqIdx(id) )
创建唯一索引的语句为 UNIQUE INDEX [索引名](列名)
3、创建全文索引
CREATE TABLE T1 ( id INT NOT NULL, name CHAR(30) NOT NULL, age INT NOT NULL, info VARCHAR(255), FULLTEXT INDEX FullTxtIdx(info) ) ENGINE=MyISAM;
创建全文索引的语句为 FULLTEXT INDEX [索引名](列名), 其中存储引擎为MyISAM
4、创建空间索引
CREATE TABLE T1 ( g GEOMETRY NOT NULL, SPATIAL INDEX spatLdx(g), ) ENGINE = MyISAM;
创建空间索引的语句为 FULLTEXT INDEX [索引名](列名), 其中存储引擎为MyISAM
二、在已有表上创建索引
1、使用ALTER TABLE 语句创建索引
其中基本语法为: ALTER TABLE table_name ADD [索引种类] [索引名](字段);
如:
普通索引: ALTER TABLE book ADD INDEX BkNameIdx(bookname(30) );
唯一索引: ALTER TABLE book ADD UNIQUE INDEX UniqidIdx( bookId );
全文索引: ALTER TABLE book ADD FULLTEXT INDEX infoIdx( info);
空间索引: ALTER TABLE book ADD SPATIAL INDEX spatIdx( g );
2、使用CREATE INNDEX语句创建索引
其中基本语法为:
CREATE [索引种类] INDEX [索引名] ON [表名](字段名)
如:
普通索引: CREATE INDEX BkNameIDX ON book(bookname);
唯一索引: CREATE UNIQUE INDEX UniqidIdx ON book( bookId );
全文索引: CREATE FULLTEXT INDEX ON T1(info);
空间索引: CREATE SPATIAL INDEX spatIdx ON T1(g);
3、删除索引
a、用ALTER TABLE 删除:
ALTRER TABLE [表名] DROP INDEX [索引名];
b、用DROP INDEX删除:
DROP INDEX [索引名] ON [表名];