开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 33 天,点击查看活动详情
一、创建索引
- 1.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
- 2.在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索
- 3.一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要
1.普通索引(INDEX)
- 这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。
- 直接创建索引
CREATE INDEX index_name ON table(column(length));
- 修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length));
- 创建表的时候同时创建索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`), //主键索引
INDEX index_name (title(length)) //普通索引
);
2、唯一索引(UNIQUE)
- 与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须是唯一的,创建方法和普通索引类似。
- 创建唯一索引
CREATE UNIQUE INDEX index_name ON table(column(length));
- 修改表结构
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length));
- 创建表时同时创建索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE indexName (title(length))
);
3、多列索引
- 语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合
ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10));
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` );
4、全文索引(FULLTEXT)
ALTER TABLE `table_name` ADD FULLTEXT ( `column`);
5、主键索引(PRIMARY KEY)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );