普通索引 index
建表时创建
CREATE TABLE mytable (
`name` VARCHAR(32) ,
INDEX index_mytable_name (`name`)
);
建表后,直接创建索引
CREATE INDEX index_mytable_name ON mytable(name);
修改表结构
ALTER TABLE mytable ADD INDEX index_mytable_name (name);
唯一索引 unique index
建表的时候一起创建
CREATE TABLE mytable (
`name` VARCHAR(32) ,
UNIQUE index_unique_mytable_name (`name`)
);
建表后,直接创建索引
CREATE UNIQUE INDEX index_mytable_name ON mytable(name);
修改表结构
ALTER TABLE mytable ADD UNIQUE INDEX index_mytable_name (name);
主键索引
建表的时候一起创建
CREATE TABLE mytable (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(32) ,PRIMARY KEY (`id`)
);
修改表结构
ALTER TABLE test.t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id);
组合索引
建表的时候一起创建
CREATE TABLE mytable (
`id` int(11) ,
`name` VARCHAR(32) ,INDEX index_mytable_id_name (`id`,`name`)
);
建表后,直接创建索引
CREATE INDEX index_mytable_id_name ON mytable(id,name);
修改表结构
ALTER TABLE mytable ADD INDEX index_mytable_id_name (id,name);
全文索引
主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。
fulltext索引配合match against操作使用,而不是一般的where语句加like。
它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。
创建方法:
建表的时候一起创建
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(250) NOT NULL ,
`contents` text NULL ,`create_at` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),FULLTEXT (contents)
);
建表后,直接创建索引
CREATE FULLTEXT INDEX index_article_contents ON article(contents);
修改表结构
ALTER TABLE article ADD FULLTEXT INDEX index_article_contents (contents);
使用全文索引:
SELECT * FROM `表名` WHERE MATCH (`列名`,`可以一列可以多列`) AGAINST ('要搜索的关键字' IN NATURAL LANGUAGE MODE); -- NATURAL LANGUAGE MODE表示自然语言搜索,就是普通的关键词搜索
SELECT * FROM `表名` WHERE MATCH (`列名`,`可以一列可以多列`) AGAINST ('+文章里应该包含的字符串 -文章里不应该包含的字符串' IN BOOLEAN MODE); -- BOOLEAN MODE 可以用 + - 表示关键字必须包含或必须不包含
其他索引就正常select的时候,有索引就会自动用索引。