首页 > 数据库 >MySQL索引

MySQL索引

时间:2023-03-06 11:36:41浏览次数:38  
标签:index -- 索引 key MySQL 主键

索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。

提取句子主干,就可以得到索引的本质:索引是数据结构

1.1、索引的分类

在一个表中,主键索引只能有一个,唯一索引可以有多个

  • 主键索引(primary key)
    • 唯一的标识,主键不可重复,只能有一个主键,多个列可做一个主键
  • 唯一索引(unique key)
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识为 唯一索引
  • 常规索引(key/index)
    • 默认的,index/key关键字来设置
  • 全文索引(fulltext)
    • 在特定的数据库引擎下才有,MyISAM
    • 快速定位数据
-- 索引的使用
-- 1、在创建表的时候给字段增加索引
-- 2、创建完毕后,增加索引

-- 显示所有的索引信息
show index from `student`;

-- 增加一个索引 自取索引名(列名)
alter table `student` add fulltext index 学生名(`studentname`);

-- explain 分析sql执行的状况
explain select * from `student`; -- 非全文索引

explain select * from student where match(studentname) against('高');

1.2、测试索引

-- 插入100万条数据
delimiter $$ -- 写函数之前必须要写,标志
create function mock_data()
returns int
begin
	declare num int default 1000000;
	declare i int default 0;
	while i<num do
		-- 插入语句
		insert into `app_user`(`name`,`email`,`phone`,`gender`,`password`,`age`)
		values (concat('用户1',i),'[email protected]',
		concat('18',floor(rand()*999999999)),
		floor(rand()*2),uuid(),floor(rand()*100));
		set i = i+1;
	end while;
	return i;
end;

select mock_data();

set global log_bin_trust_function_creators = 1; -- 信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求,设置log_bin_trust_routine_creators全局系统变量为1。

explain select * from app_user where `name` = '用户1865456'; -- 查看搜索过程
select * from app_user;

-- id_表名_字段名
-- create index 索引名 on 表(字段)
create index id_app_user_name on app_user(`name`);
select * from app_user where `name` = '用户1865456';

索引在小数据量的时候,用户不大,但是在大数据的时候,区别十分明显

1.3、索引原则

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加在常用来查询的字段上!

索引的数据结构

Hash类型的索引
BTree:Innodb的默认数据结构

标签:index,--,索引,key,MySQL,主键
From: https://www.cnblogs.com/studydreamlife/p/17183126.html

相关文章

  • 索引
    1.索引类似于数据库表的目录,可以快速定位到相关数据2.innodb使用b+树索引。memory中使用hash索引3.hash索引因为使用hash存储,所以单条查询速度快,但是因为hash无序,所以范......
  • MySql 清理两张表的死数据
    1、mysql如何两个表取差集_mysql查询两张表的差集SELECT*FROMym_message_internalwheretreatment_idin(SELECTa.treatment_idFROMym_message_internalal......
  • MySQL事务
    1.事务1.1、什么是事务要么都成功,要么都失败——————1、SQL执行A给B转账A1000——转——>200B2002、SQL执行B收到A的钱A800——收——>B......
  • MySQL函数
    1、常用函数--================常用函数==============--数学运算selectabs(-8)--绝对值selectceiling(9.4)--向上取整selectfloor(9.4)--向下取整sele......
  • MySql(7)—— 约束、存储引擎
    约束(非常重要)什么是约束?constraint在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!约束的作用:保证表中的数据有效约束的种类非空约......
  • 解决C#使用MySQL时,无法进行中文模糊查询的问题
    以前用MySQL用得少,也没出现过类似的问题,大概就是如下的情况1select*fromxxxxwherexxlike'%中文关键字%';在C#里进行更新时时,发现未查询到相关结果,在网上找了一......
  • MySQL安装入门第一篇
    【1】MySQL的版本:近期主要历史版本有5.0/5.1/5.5/5.6/5.7,目前最新版本是MySQL8.6.0曾经是个内部试验版本,已取消了。MySQL8.0的版本历史1)2016-09-12第一个DM(develop......
  • 既然有MySQL了,为什么还要有Redis?
    一、同样是缓存,用map不行吗?Redis可以存储几十个G的数据,Map行吗?Redis的缓存可以进行本地持久化,Map行吗?Redis可以作为分布式缓存,Map只能在同一个JVM中进行缓存;Redis支持每秒百......
  • 08-Redis系列之-Redis布隆过滤器,MySQL主从,Django读写分离
    Redis实现布隆过滤器前言布隆过滤器使用场景比如有如下几个需求:原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中?解决办......
  • 教你Mysql的配置与密码忘记改咋办
    Mysql基础应用一、安装mysql模拟密码遗忘修改密码登录1、安装mysql[root@centos01~]#mount/dev/cdrom/mnt/mount:/dev/sr0写保护,将以只读方式挂载[root@centos01~]#......