CREATE INDEX index_name ON table_name(column(length));
ALTER TABLE table_name ADD INDEX index_name (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)));
CREATE TABLE `kc3` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) NOT NULL ,
PRIMARY KEY (`id`));
4.组合索引(最左前缀)
可以是单列上创建的索引,也可以是在多列上创建的索引
最左原则,从左往右依次执行
创建组合索引的方式
create table user(
name varchar(9),
age int(3),
sex tinyint(1),
index user(name, age, sex));# 在 MySQL 中,有一个知识点叫最左原则。下面的 select 语句的 where 条件是依次从左往右执行的。
select *from user where name ='' AND age ='' AND sex ='';# 若使用的是组合索引 index user(name, age, sex)。# 在查询中,name、age、sex 的顺序必须如组合索引中一致排序,否则索引将不会生效,例如:
select *from user where age ='' AND name ='' AND sex ='';
5.全文索引(FULLTEXT)
MySQL从3.23.23版开始支持全文索引和全文检索
索引类型为FULLTEXT
可以在CHAR、VARCHAR或者TEXT类型的列上创建
4、创建索引的原则依据
表的主键、外键必须有索引
记录数超过300行的表应该有索引
经常与其他表进行连接的表,在连接字段上应该建立索引
唯一性太差的字段不适合建立索引
更新太频繁地字段不适合创建索引
经常出现在where子句中的字段,特别是大表的字段,应该建立索引
索引应该建立在选择性高的字段上
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引
5、查看索引
Table:表的名称。
Non_unique:如果索引不能包括重复词,则为 0;如果可以,则为 1。
Key_name:索引的名称。
Seq_in_index:索引中的列序号,从 1 开始。
Column_name:列名称。
Collation:列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分类)。
Cardinality:索引中唯一值数目的估计值。通过运行 ANALYZE TABLE 或 myisamchk -a 可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大。
show index from kc65;
show keys from kc65;
mysql> show index from kc65;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| kc65 |0| a3 |1|id| A |0| NULL | NULL | YES | BTREE |||| kc65 |0| a4 |1|id| A |0| NULL | NULL | YES | BTREE |||| kc65 |1| a1 |1|id| A |0| NULL | NULL | YES | BTREE |||| kc65 |1| a2 |1|id| A |0| NULL | NULL | YES | BTREE |||+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+4 rows inset(0.00 sec)
6、删除索引
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
mysql> drop index a1 on kgc.kc65;
Query OK,0 rows affected (0.01 sec)
Records:0 Duplicates:0 Warnings:0
mysql> alter table kgc.kc65 drop index a2;
Query OK,0 rows affected (0.01 sec)
Records:0 Duplicates:0 Warnings:0