1、每个表支持16个索引,总索引长度至少为256字节。

2、MyISAM和InnoDB引擎默认创建的都是BTREE索引。不支持函数索引支持前缀索引。

3、MyISAM还支持全文本(FULLTEXT)索引,该索引可以用于全文索引。

索引的设计原则:最适合索引的列是出现在WHERE子句中的列,或者连接子句中的列,不是出现在select 关键字后选择的列。

最优使用唯一索引。考虑索引列的基数越大,索引的效果越好。

使用短索引。如果对字符串进行索引,应该指定一个前缀长度。较小的索引能够节省大量索引空间,也可能使查询更快。较小的索引涉及的IO较少,较短的值比较起来更快。较短的索引,索引高速缓存中的块能容纳更多的键值。

利用最左前缀。(a,b,c)适配a;ab;abc;ac;

不要过度索引。 额外的索引要占用磁盘空间;并降低写操作的性能;修改表时要对所有索引进行更新和可能重构。

有多个唯一列情况下,选择最常作为访问条件的列作为主键。

InnoDB表的普通索引都会保持主键的键值,所以主键要尽可能的短,减少索引暂用磁盘空间提高索引的缓存效果。

Btree索引:使用>,<,>=,<=,BETWEEN,!=,<>,like'pattern'其中pattern不能以通配符开始可以依通配符结束 (like'%pattern',like'pattern%')都可以用到索引

HSAH索引:只使用与具体值比较,=,<=> 安全等于的意思,处理null,当比较的值含有null值的时候,来返回一个布尔值.

create [unique|fulltext|spatial]

mysql索引类型key,primary,unique,fulltext,spatial

primary:唯一索引,不允许为null。

key:普通非唯一索引。

unique:表示唯一的,不允许重复的索引,可以为null。

fulltext: 表示全文搜索的索引。 FULLTEXT用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的INDEX 也可以。

spatial:空间索引。

只有char、varchar,text 列上可以创建全文索引。

1.索引不会包含有null值的列
只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。