mysql索引类型

索引类型:搜索引擎

  1. 普通索引
  2. 惟一索引
  3. 主键索引
  4. 组合索引
  5. 全文索引

1.普通索引spa

最基本的索引,没有任何限制code

建立方式:blog

CREATE INDEX `CODE_INDEX` ON `vanora_test` (`code`) USING BTREE;

  

CREATE TABLE `vanora_test` ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, INDEX `CODE_INDEX` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

删除索引:排序

ALTER TABLE `vanora_test` DROP INDEX `CODE_INDEX` ;

 

2.惟一索引索引

相似普通索引,不一样是:索引列必须惟一,单容许空值。若是是组合索引,则列值组合必须惟一
建立方式:ci

CREATE UNIQUE INDEX `CODE_INDEX` ON vanora_test(`code`);

  

CREATE TABLE vanora_test_INDEX ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, UNIQUE INDEX `U_INDEX` (CODE) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

删除索引it

ALTER TABLE `vanora_test` DROP INDEX CODE_INDEX

 

3.主键索引table

特殊的惟一索引,一个表只能有一个主键,不容许有空值,通常在新建表的时候会同时建立主键索引class

建立方式:

 

ALTER TABLE VANORA_TEST ADD PRIMARY KEY (CODE);

 

CREATE TABLE vanora_test_INDEX ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, PRIMARY KEY(`CODE`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

 

删除方式

ALTER TABLE vanora_test DROP PRIMARY KEY;

 

id是自增加的主键索引,删除时注意:

CREATE TABLE `vanora_test` ( `code` varchar(20) NOT NULL, `id` int(10) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `city_code` int(10) DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=gbk

 

alter table vanora_test DROP PRIMARY KEY;(错误)
alter table vanora_test DROP id;(直接删除字段)


删除索引:
alter table vanora_test modify id int(10) NOT NULL;(去掉自增)
alter table vanora_test drop primary key;


4.组合索引

ALTER TABLE vanora_test ADD INDEX CODE_ID_INDEX (CODE,id);

使用组合索引遵循最左前缀集合,比方索引是key index(a,b,c),这种索引支持a|a,b|a,b,c 三种组合查找,其余状况,组合索引没有用处
复合索引的结构与电话簿相似,人名由姓和名构成,电话簿首先按姓氏对进行排序,而后按名字对有相同姓氏的人进行排序。若是您知 道姓,电话簿将很是有用;若是您知道姓和名,电话簿则更为有用,但若是您只知道名不姓,电话簿将没有用处。

5.全文索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操做使用,而不是通常的where语句加like。它能够在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上能够建立全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,而后再用CREATE index建立fulltext索引,要比先为一张表创建fulltext而后再将数据写入的速度快不少。

建立

CREATE TABLE `full_table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), FULLTEXT (content) );
ALTER TABLE full_table ADD FULLTEXT index_content(content);

 

缺点

1.提升了速度,可是下降了更细表的速度,更新表时,不只要保存数据,还要保存一下索引文件
2.创建索引会占用磁盘空间

注意

1.索引列不包含有null的值
有null值的列不会被包含在索引中,组合索引只要有一列是null,组合索引无效


2.使用短索引
提升查询速度,节省磁盘空间


3.索引列排序
查询只使用一个索引,where使用了索引,order by中再也不使用索引


4.like
like 'aa%' 使用了索引
like '%aa' 没有使用索引


5.在索引列进行运算,索引失效
SELECT * FROM order WHERE DATE_FORMAT(Create_Time,'%Y%m%d')>='20190301' LIMIT 10;

6.可使用索引的:<,<=,=,>,>=,BETWEEN,IN可使用索引的:<>,not in ,!=

相关文章
相关标签/搜索