目录
- 什么是索引?
- Mysql常见索引
- Mysql各种索引区别:
- 操作实例
- 准备工作
- 创建索引
- 主键索引 primary
- 唯一索引 unique
- 普通索引 noraml
- 全文索引 fulltext
- 组合索引
- 五种索引的区别
什么是索引?
百度百科:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
Mysql常见索引
主键索引、唯一索引、普通索引、全文索引、组合索引
Mysql各种索引区别:
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。
全文索引(FULLTEXT ):仅可用于 MyISAM 表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
操作实例
准备工作
1.创建一个100W数据表(把主键id设置为自增)
2.如果给字段添加的值有中文 需要将字符集改为UTF-8的格式
3.保存存储过程,用来添加100w条数据(字段和数据可以自己修改)
delimiter $$ # 定义结束符
drop procedure if exists addTestData; # 存储过程名叫:addTestData
create procedure addTestData()
begin
declare number int;
set number = 1;
while number <= 1000000 #插入N条数据
do
insert into test(id,user_name,`password`,text) #需要添加值得字段
values(null,concat('姓名_',number),concat('密码:',number),concat('账号',number,'密码',number)); # 对应字段的值
set number = number + 1;
end
while;
end $$
4.调用存储过程来添加100w条数据
call addTestData();
执行的过程中会比较慢,大家可以使用select语句 查看创建了多少条数据了
select count(id) from test
创建索引
主键索引 primary
mysql提前给我们创建好了,不需要我们自己创建主键索引。
唯一索引 unique
sql语句:SELECT * FROM test where user_name =‘姓名_1’
创建唯一索引:create unique index username ON test(user_name);
普通索引 noraml
sql语句:SELECT * FROM test WHERE password=‘密码:55’
创建普通索引:create index password on test( password );
全文索引 fulltext
执行全文索引的SQL语句: SELECT * FROM test WHERE MATCH(text) AGAINST(‘账号1’ IN BOOLEAN MODE); match()函数中的值要和全文索引添加的列保持一致。 against()函数中的值要填写要搜索的关键字后面可以添加搜索的条件语句
加索引之前 SELECT * FROM test where text LIKE ‘%阿仇’
创建全文索引:create fulltext index text on test(text);
加索引之后 select id from test where match(text) against(‘阿仇’);
组合索引
示例:SELECT * FROM test where user_name=“姓名_10” AND password=“密码:10”
创建组合索引:create index (索引名)username、password on (表名)test ((添加索引的字段)user_name, password)
五种索引的区别
以下是关于主键索引、唯一索引、普通索引、全文索引和组合索引的区别的表格表示:
主键索引 | 唯一索引 | 普通索引 | 全文索引 | 组合索引 | |
---|---|---|---|---|---|
定义 | 用于唯一标识表中的每一行数据 | 确保列或列组合中的值是唯一的 | 加快对表中数据的查找速度 | 用于对文本内容进行全文搜索 | 包含多个列的索引 |
空值 | 不允许 | 允许 | 允许 | 允许 | 允许 |
数据重复 | 不允许 | 不允许 | 允许 | 允许 | 允许 |
查询速度 | 非常快 | 非常快 | 快 | 快 | 快 |
写操作 | 对写操作有一定的性能影响 | 对写操作有一定的性能影响 | 对写操作没有明显影响 | 对写操作没有明显影响 | 对写操作有一定的性能影响 |
用途 | 唯一标识每一行数据,主要用于关联表和数据完整性 | 确保列或列组合中的值是唯一的,用于约束数据 | 加快数据查询速度,提高性能 | 对文本内容进行全文搜索 | 提高查询性能,减少查询时间 |