1.normal(普通索引):是普通索引,没有限制。
2.UNIQUE(唯一索引):是唯一的,不允许重复的索引。索引列的值必须唯一,但是允许为空值。
3.FULLTEXT(全文索引):是全文搜索的索引。主要用来查找文本(索引列的值)中的关键字
4.spatial(空间索引):是对空间数据类型的字段建立的索引。MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。只能在存储引擎为MYISAM的表中创建
5.主键索引:是一种特殊的唯一索引。一个表只能有一个主键,不允许是空值。
一般是在创建表的时就创建主键索引:
CREATE TABLE table_name (
id int(10) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
PRIMARY KEY (id)
);
6.综合索引(组合索引):只有在查询条件中使用了创建索引时的第一个字段,索引就会被使用,使用组合索引时,遵循最左原则。
最左原则:在检索数据时从联合索引的最左边开始匹配。例如:
如果有一个3列索引(col1,col2,col3),实际上已经建立了三个联合索引(col1)、(col1,col2)、(col1,col2,col3)。
注意:
SELECT
*
FROM
test
WHERE
col1=“1”
AND
clo2=“2”;
SELECT
*
FROM
test
WHERE
col2=“2”
AND
clo1=“1”;
这两种写法都用到了索引,但是第一种写法的执行效率最高。
SELECT
*
FROM
test
WHERE
col2=“2”我测试的是没有触发索引,而是进行了全表扫描。
组合索引的优点:
1.
减少开销。(写操作的开销和磁盘空间的开销)
2.覆盖索引。对联合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通过遍历索引取得数据,减少io操作,提升性能。
3.效率高。索引列越多,通过索引筛选出的数据越少。效率越高