MySQL心得5-1--索引(二)
前5个字符建立一个升序索引XH _XS。
CREATE INDEX XH_XS ON XS(学号(5) ASC);
可以在一个索引的定义中包含多个列,中间用逗号隔开,但是它们要属于同一个表。这样的索引叫做复合索引。
例: 在XS_KC表的学号列和课程号列上建立一个复合索引XSKC _IN。
CREATE INDEX XSKC_IN ON XS_KC(学号,课程号);
5. 使用ALTER TABLE语句
前面介绍了如何使用ALTER TABLE语句修改表,其中也包括向表中添加索引。 语法格式如下:
ALTER [IGNORE] TABLEtbl_name
add index [索引名] [索引类型] (索引列,...) /*添加索引*/
| add [constraint [symbol]] primary key [索引类型] (索引列,...) /*添加主键*/ www.2cto.com
| add [CONSTRAINT [symbol]]UNIQUE [index_name][index_type] (index_col_name,...) /*添加唯一性索引*/
| add [FULLTEXT | SPATIAL] [索引名] (索引列,...) /*添加全文索引*/
| add [CONSTRAINT [symbol]] foreign key [索引名] (索引列,...)[reference_definition] /*添加外键*/
| disable keys
| enable keys
说明:
● index_type:语法格式为USING{BTREE | HASH}。
当定义索引时默认索引名,则一个主键的索引叫做“PRIMARY”,其他索引使用索引的第一个列名作为索引名。如果存在多个索引的名字以某一个列的名字开头,就在列名后面放置一个顺序号码。
● constraint [symbol]:为主键、UNIQUE键、外键定义一个名字。以下也有用到。这个将在命名完整性约束一节中介绍。
● disable keys| enable keys:只在MyISAM表中有用,使用ALTER TABLE...DISABLE KEYS可以让MySQL在更新表时停止更新MyISAM表中的非唯一索引,然后使用ALTER TABLE ... ENABLE KEYS重新创建丢失的索引,这样可以大大地加快查询的速度。
例: 在XS表的姓名列上创建一个非唯一的索引。
ALTER TABLE XS ADD INDEX XS_XM USING BTREE (姓名);
例: 以XS表为例(假设XS表中主键未定),创建这样的索引,以加速表的检索速度:
ALTER TABLE XS ADD PRIMARY KEY(学号),
ADD INDEX mark(出生日期,性别);
这个例子中,既包括PRIMARY KEY,也包括复合索引,说明MySQL可以同时创建多个索引。记住:使用PRIMARY KEY的列,必须是一个具有NOT NULL属性的列。 www.2cto.com
如果想要查看表中创建的索引的情况,可以使用show index from索引名 语句,例如:SHOW INDEX FROM XS;
6. 在创建表时创建索引
在前面两种情况下,索引都是在表创建之后创建的。索引也可以在创建表时一起创建。在创建表的CREATE TABLE语句中可以包含索引的定义。
语法格式:
Create [temporary] table [IF NOT EXISTS] 表名
[ ( [字段名] , ... |[index_definition] ) ]
[table_option] [select_statement];
其中,index_definition为索引项:
[constraint [symbol]]PRIMARY KEY [索引类型] (索引列,...) /*主键*/
| {INDEX | KEY}[索引名] [索引类型] (索引列,...) /*索引*/
| [constraint [symbol]] UNIQUE [INDEX] [索引名] [索引类型] (索引列,...) /*唯一性索引*/
| [FULLTEXT|SPATIAL][INDEX] [索引类型] (索引列,...) /*全文索引*/ www.2cto.com
| [constraint [symbol]] foreign KEY [索引类型] (索引列,...) [reference_definition] /*外键*/
说明:KEY通常是INDEX的同义词。在定义列选项的时候,也可以将某列定义为PRIMARYKEY,但是当主键是由多个列组成的多列索引时,定义列时无法定义此主键,必须在语句最后加上一个PRIMARY KEY(col_name,…)子句。
例:创建XS_KC表的语句如下,XS_KC表带有学号和课程号的联合主键,并在成绩列上创建索引。
CREATE TABLE XS_KC(
学号 CHAR(6) NOT NULL,
课程号 CHAR(3) NOT NULL,
成绩 TINYINT(1),
学分 TINYINT(1),
PRIMARY KEY(学号,课程号),INDEX CJ(成绩));
7. 1). 使用DROP INDEX语句删除索引
语法格式:DROP INDEX index_name ON tbl_name
这个语句语法非常简单,index_name为要删除的索引名,tb1_name为索引所在的表。
例: 删除XS表上的XS_XH索引。
DROP INDEX XS_XH ON XS;
2). 使用ALTER TABLE语句删除索引
语法格式:
ALTER [ignore] TABLE tbl_name
| DROP PRIMARY KEY /*删除主键*/
| DROP INDEX index_name /*删除索引*/
| DROP FOREIGN KEY fk_symbol /*删除外键*/
其中,DROP INDEX子句可以删除各种类型的索引。使用DROP PRIMARY KEY子句时不需要提供索引名称,因为一个表中只有一个主键。
www.2cto.com
例: 删除XS表上