首页 > 数据库 >mysql中的索引

mysql中的索引

时间:2023-06-18 12:22:05浏览次数:42  
标签:INDEX 查询 索引 添加 mysql id

1、索引是什么?

在mysql当中, 内部系统它有两种查询方式, 一种是(全盘扫描查询),另外一种是通过(索引检索查询),通过添加了索引的字段进行查询, 可以大大提高查询效率

mysql中的索引相当于一本书中的目录, 通过索引查询数据类似于与通过书的目录查找内容,查询速度可以大大增加。

MySQL中的索引是添加在字段当中的, 一个字段只能添加一个索引,或者多个字段添加同一个索引。

索引是以对象的形式体现在mysql中的, 是以树的结构也就(二叉树),它遵循这左小右大的规则进行排序

 

2. 索引的检索原理:

假如现在有这样一张表,我想查询id = 101这一行数据, 在没有添加索引的情况下, 系统是一行一行往下对比查询的,需要对比5次才能得出结果,如果数据量大,查询速度会非常的慢

 

假如id字段添加了索引,如下图,它的查询逻辑是这样的:

拿101和100对比一次, 比100大, 走右边, 再拿101和102对比一次, 比102小,走左边,然后再取101的内存地址,再将sql语句转换成直接通过内存地址查询,这样查询速度会快很多。

可以查看出使用了索引只需2步就可以可以查出数据,在数据量大的情况下,速度会质数性提高。

 

3. 怎么创建索引?删除索引?查询索引?

在mysql中,主键和unique(约束)字段上系统会自动添加索引

索引不是随意添加的, 如果索引过多,有可能会拖垮系统性能。 那什么情况下适合添加索引?

条件1:查询数据量庞大

条件2:经常放在where后面的字段

条件3:该字段很少被(增删改)操作

 

创建索引:在mysql中, 主键字段和

# CREATE INDEX 索引别名 on 表名(字段名);
CREATE INDEX id_index on tableName(id);

 

删除索引

# DROP INDEX 索引别名 on 表名;
DROP INDEX id_index on tableName;

 

查看索引

# explain 查询语句
EXPLAIN SELECT * from testdb.tableName WHERE NAME = '杰克'

未添加索引的情况下

 

添加了索引的情况下

 

索引也会有失效的时候?在什么情况下会失效?

答:在使用了模糊查询,并且%放在前面的时候, 如select * from table where name = "%三";

 

标签:INDEX,查询,索引,添加,mysql,id
From: https://www.cnblogs.com/FBGG/p/17488962.html

相关文章

  • 【后端面经】MySQL主键、唯一索引、联合索引的区别和作用
    目录0.简介1.主键2.唯一索引3.联合索引4.索引对数据库操作的影响5.其他索引5.1普通索引5.2全文索引5.3前缀索引6.总结7.参考资料0.简介索引是一类特殊的文件,用来存储检索信息,使数据库查找更加快速。1.主键主键是一类特殊的唯一索引,选择某一列元素作为主键,用来表......
  • Mysql union和union all用法
    1:什么时候用union和unionall?  我们经常会碰到这样的应用,两个表的数据按照一定的查询条件查询出来以后,需要将结果合并到一起显示出来,这个时候就需要用到union和unionall关键字来实现这样的功能,union和unionall的主要区别是unionall是把结果集直接合并在一起,而union......
  • MySQL 实际项目优化总结
    1. query_cache_size引起的Waitingforquerycachelock问题,严重时会引起数据库宕机A. 优化登录新建时,发现登录性能无法提升但是MySQL资源又较正常时,使用showprocesslist查看发现有部分‘Waitingforquerycachelock’;B. 解决办法:查看配置命令为showvariables......
  • 【后端面经】MySQL主键、唯一索引、联合索引的区别和作用
    (【后端面经】MySQL主键、唯一索引、联合索引的区别和作用)0.简介索引是一类特殊的文件,用来存储检索信息,使数据库查找更加快速。1.主键主键是一类特殊的唯一索引,选择某一列元素作为主键,用来表示每一行元素的特殊性,其特点如下在一个数据表中只有一个主键;主键不能为空(null);......
  • MySQL-hash索引
    1哈希索引原理哈希索引原理其实就是hash表,搜索时间效率O(1),搜索效率好,也意味着磁盘IO花费少,mysql底层使用的是链式哈希表,结构如下,每一个bucket就是一个个哈希桶,也就是哈希链表的头结点。哈希结构天然的需要耗费空间资源,是一种用空间换时间的做法2哈希要点:解决哈希冲突的几种方式再......
  • 云原生之使用Docker部署mysql数据库
    (云原生之使用Docker部署mysql数据库)一、检查系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"A......
  • in用不用索引,啥时候能用啥时候不能用,一文说清
    in/or到底能不能用索引应该是肯定的,但有时生效有时不生效,这个能不能量化计算?这是本文想讨论和解答的问题。in到底用不用索引感觉像一桩悬疑片!古早时期的面经,统一说不走索引,在一些程序员脑海中从此留下不可磨灭的印记。有些从业时间较长的程序员脑子里的第一反应就是不走索引,上......
  • 花了一周时间,总算把mysql的加锁搞清楚了,再也不怕间隙锁和next-key了
    接触mysql都知道在mysql中有很多锁,共享锁(S)、排他锁(X)、间隙锁(gap)、next-key,当然还有意向锁、表锁等。今天不讲别的,专门来看下innodb引擎下的锁是什么样子的。现在有这样一条sql语句,你知道是什么锁吗?updatetsetname='1'whereid=10;可能会说是锁住id=10的行锁吧,没错行锁是一......
  • 10. docker方式下的mysql设置主从复制(一主两从)
    上一篇【centos使用docker方式安装mysql】笔记中,我们在三个虚拟机中使用docker方式新建了三个mysql容器服务,那么我们这篇文章来记录下,如何在这三台机器中设置mysql的主从复制功能。其中111服务器作为主节点,112和113两个服务器作为两个从节点,复制111服务器mysq......
  • windows下mysql使用mysqldump定时备份数据库,删除过期备份
    windows下mysql使用mysqldump定时备份数据库,删除过期备份创建备份脚本:@echooffforfiles/p"d:\mysql_backup"/mbackup_*.sql-d-7/c"cmd/cdel/f@path"set"Ymd=%date:~0,4%%date:~5,2%%date:~8,2%"cdD:\Mysql\mysql-8.0.18\binmysqldump--opt......