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。