mysql 唯一索引类型_mysql索引类型

索引类型:

普通索引

唯一索引

主键索引

组合索引

全文索引

1.普通索引

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

创建方式:

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.唯一索引

类似普通索引,不同是:索引列必须唯一,单允许空值。如果是组合索引,则列值组合必须唯一

创建方式:

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

删除索引

ALTER TABLE `vanora_test` DROP INDEX CODE_INDEX

3.主键索引

特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般在新建表的时候会同时创建主键索引

创建方式:

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 ,!=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值