索引的分类
1. 唯一索引和普通索引 普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。 唯一索引,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引 是一种特殊的唯一索引,不允许有空值。
2. 单列索引和组合索引 单列索引即一个索引只包含单个列,一个表可以有多个单列索引。 组合索引指在表 的多个字段组合上创建的索引。只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使 用组合索引时遵循最左前缀集合。
3. 全文索引 fulltext 全文索引类型为FULLTEXT,在定义索引的列上支持值得全文查找,允许在这些索引列 中插入重复值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建。MySQL中只有 MyISAM存储引擎支持全文索引。
4. 空间索引 空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4中,分别是: geometry、point、linstring和polygon 。MySQL使用SPATIAL关键字进行扩展,使得能够用于创建空间索 引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MyISAM的表中创建。
创建普通索引
语法:create table 表名(字段1 类型,字段2 类型, index(字段1,字段2...));
查看表的索引
加\G为了我们更方便的查看。
语法:show create table 表名\G
show index from 表名\G
show indexes from 表名\G
show keys from 表名\G
这里看到KEY后面就是我们添加的所以,KEY后面的ID是这个索引的名字。
用explain 判断索引是否正在被使用
语法:explain select * from 表名 where 字段=条件\G
【唯一索引】
创建唯一索引 唯一索引主要原因是减少查询索引列操作的执行时间。尤其是对比比较庞大的数据 表。与普通索引类似,不同点在于:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必 须唯一。
语法:create table 表名(字段1 类型,字段1 类型..,unique index 起个名字(指定类型));
【单列索引】
单列索引:是在数据表中的某一字段上创建的索引,一个表中可以创建多个单列索引
语法:create table 表名(字段1 类型,字段1 类型..,index 起个名字(指定类型));
【组合索引】
组合索引:是在多个字段上创建一个索引。遵循最左前缀原则。最左前缀 索引最左边的列来匹配 行 创建
语法:create table 表名(字段1 类型,字段1 类型..,index 起个名字(指定字段1,指定字段2));
【全文索引】
全文索引:FULLTEXT
语法:create table 表名(字段1 类型,字段1 类型....,fulltext 起个名字(指定字段1,指定字段2));
【空间索引】
空间索引:且空间类型的字段必须为非空
在已经存在的表上创建索引
语法:alter table 表名 add index 起个名字(指定字段);
添加唯一性索引
索引列的值必须唯一,但允许有空值
语法:alter table 表名 add unique index 起个名(指定字段);
添加单列索引
语法:alter table 表名 add index 起个名 (指定字段);
添加全文索引
语法:alter table 表名 add fulltext index 起个名(指定字段);
先创建个表
添加组合索引
alter table 表名 add index 起个名( 指定字段1,指定字段2);
添加空间索引
alter table 表名 add SPATIAL index 起个名(指定字段);
【删除索引】
语法:alter table 表名 drop index 索引名;
不知道索引名的用这个查看:
show create table 表名\G
show index from 表名\G
show indexes from 表名\G
show keys from 表名\G
删除全文索引