MySQL主要有四种索引
主键索引 primary key
唯一索引 unique
常规索引 index
全文索引 fulltext
(1) 主键索引
主键索引是关系数据库中最常见的索引类型 主要作用是确定数据表里一条特定的数据记录的位置
我们可以在字段后添加primary key 来对字段设置为主键索引
注意事项
- 最好为每张表指定一个主键 但不是必须指定
- 一个表只能指定一个主键 而且主键的值不能为空 通常和auto_increment 搭配
创建
代码语言:javascript复制create testprim(
id int unsigned primary key auto_increment
)
自增得步长
mysql的默认步长是居于会话session的 查看全局变量 其中默认为1
查看步长
代码语言:javascript复制show session variables like 'auto_inc%';
设置步长 只能针对当前的会话
代码语言:javascript复制set session auto_incrment_increment = 2; 设置会话步长为2
查看全局
代码语言:javascript复制show global variables liek 'auto_inc%';
修改全局级别的
代码语言:javascript复制set global auto_increment_increment = 1;
修改自增值(自增归位)
代码语言:javascript复制alter table user auto_increment = 1;
truncate 表名 (清空表 并将自增归位)
(2) 常规索引 index
常规索引技术是关系型数据库查询中最重要的技术 如果要提升数据库的性能 索引优化是首先应该考虑的 因为它能使我们的数据库得到最大性能方面的提升
缺点:
- 多占用磁盘空间
- 会减慢插入 删除 和 修改的操作
创建常规索引:
创建常规索引 可以使用 index 和 key 关键字随表一同创建
实例:
代码语言:javascript复制mysql> create table testindex(
-> username varchar(20),
-> index luckyindex(username)
-> );
mysql> create table testkey(
-> username varchar(20),
-> key (username)
-> );
说明:
给username字段设置一个常规索引 索引名称为luckyindex
如果不给所以字段起名称 默认索引名称为字段名
注意:
- 在给mysql创建常规索引和唯一索引的时候 单独一行去创建 不要和字段放在一行 出错!
- 一个表中可以存在多个常规索引 但是要根据具体的情况去设置 某个字段有大量的查询的时候
(4) 唯一索引
唯一索引与主键索引一样 都可以防止创建重复的值 但是 不同之处在于 每个数据表中只能有一个主键索引 但是可以有多个唯一索引 使用unique对字段 定义唯一索引
注意:
如果在给表中字段插入值的情况报错 查看 字段是否设置了唯一索引
创建
代码语言:javascript复制mysql> create table testunique(
-> username varchar(20),
-> email varchar(50),
-> phone char(11),
-> unique(username),
-> unique uniemail(email),
-> unique(phone)
-> );
说明:
给usernam email phone设置了唯一索引 其中email设置了索引名称为uniemail 其余索引名称为 默认字段名
(5) 全文索引
全文索引在mysql中是一个fulltext类型索引 但fulltext索引只能用于MyISAM表 并且只可以在char varchar 或text类型的字段上创建
缺点:
fulltext是不支持中文全文索引的
创建
代码语言:javascript复制 CREATE TABLE `textfull` (
`article` text,
FULLTEXT KEY `article` (`article`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
代码语言:javascript复制alter table 表名 add fulltext(字段名称)