首页 > 数据库 >Mysql索引

Mysql索引

时间:2023-04-15 17:33:49浏览次数:42  
标签:-- 创建 查询 索引 Mysql id t27

索引优化速度

首先创建了一个数据库,并创建了一个表,里面有800w条记录
对其中的一条记录进行查询,使用了4.5s

此时存储这个表的文件已经有500M的大小了

添加索引后发现,刚刚存储表的文件变大了,变成了655m

索引需要占用磁盘空间

  • 索引创建

  • 使用索引查询

    我们创建索引只对创建索引所对应的列有效,如果使用其他的列进行查询还是很慢。所以我们创建索引并不能解决所有的问题

  • 索引占用磁盘空间

  • 创建一个索引并不能对所有的列都起作用

索引机制



当我们查询时,将会一条一条记录进行比对,直到比对到表尾,因为他不能确定表的后面还有没有符合条件的记录

索引优化原理

通过创建一个索引二叉树来优化查询,头节点左子树的值偶读小于左子树,右子树的值都大于头节点

这个索引的数据结构可能是二叉树,也可能是其他的数据结构

索引对删除修改插入语句的效率会有影响
我们的表中插入了索引,当我们对表中的数据进行改变时,势必将会得到我们的索引数据结构改变,将会重新维护这个索引数据结构,将会有速度影响
** 索引可以加速查询,但是也会对我们的删除插入和修改语句带啦效率影响,为什么还有使用?**
因为在显示生活中查询语句的使用量是远远大于删除修改和插入语句的,使用索引利大于弊

  • 问题总结

创建索引

mysql自带的全文索引不好用,在java开发中不会去直接使用mysql自带的全文所以



我们的主键和unique约束自带主键索引和唯一索引

-- 演示mysql索引的使用
-- 1 创建一个表
CREATE TABLE t27(
	id INT,
	`name` VARCHAR(32))
-- 2.查询表中是否有索引
SHOW INDEXES FROM t27-- 将会显示没有索引
-- 添加索引
-- 1.添加唯一索引
CREATE UNIQUE INDEX id_index ON t27(id)-- 在t27表的id列创建唯一索引
-- 2.添加普通索引方式1
CREATE INDEX id_index ON t27(id)
-- 如何选择
-- 如果某列的值是不会重复的,则优先选择使用unique索引,否则使用普通索引
-- 添加普通索引方式2
ALTER TABLE t27 ADD INDEX id_index(id)


-- 添加主键索引
ALTER TABLE t27 PRIMARY KEY id_index(id)

删除和查询索引

-- 删除索引
DROP INDEX id_index ON t25
-- 删除主键索引
ALTER TABLE t25 DROP PRIMARY KEY 

-- 修改索引
-- 先删除,再添加新的索引


-- 查询索引(有几个索引将会显示几个索引)

-- 方式1
SHOW INDEX FROM t25
-- 方式2
SHOW INDEXES FROM t25

-- 方式3
SHOW KEYS  FROM t25

-- 方式4
DESC t25-- key列显示的值就是索引,但是没有前面3种方式显示的那么详细

  • 课后练习题

创建索引的规则

如果我们建立索引的列频繁的修改,就会导致我们频繁的对二叉树索引进行唯一,速度就会有明显的影响了

创建索引的规则

标签:--,创建,查询,索引,Mysql,id,t27
From: https://www.cnblogs.com/swtaa/p/17321128.html

相关文章

  • 存储引擎-mysql体系结构
    mysql体系结构:连接层:最上层是一些客户端和链接服务,主要完成一些连接处理,授权认证,以及相关的安全方案,服务器也会为安全接入的每一个客户端验证它所具有的操作权限服务层:第二层架构主要用于完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优化,部分内置函数的执行......
  • mysql left join 查询时主表为null统计count为0的解决方法(join后面加group by)
     如果没有加groupby则会出UserCount为0外其它都是nullselecta.*,count(b.ID)asUserCountfromerp_roleasaleftjoinerp_userasbona.ID=b.RoleIdwhere1=1anda.TenantID=2anda.RoleName='string' 加上groupby一切正常selecta.*,count(b.ID)as......
  • mysql如何查询所有表和字段信息
    1MySQL中information_schema是什么information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据:元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据字典”和“系统目录”。在MySQL中,把informat......
  • 第8章_索引的创建与设计原则
    1.索引的声明与使用1.1索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上说,索引主要有4种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇索引。按照作用......
  • Linux中如何通过yum或者apt下载安装MySQL
    一、 yummysql5.7以下mysql5.7以上Centos8可以,但是需要重新配置文件可以,但是需要重新配置文件可以,但是需要重新配置文件Centos7可以直接yum,但是是安装mariadb-server。如果是mysql-server需要配置文件直接yum后启动就好yum后需要修改密码才可以进入Ubuntu......
  • Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?
       Mysql中,为什么WHERE使用别名会报错,而ORDERBY不会报错? 我们先对salary*12命名一个别名annual_salSELECTemployee_id,salary,salary*12annual_salFROMemployeesORDERBYannual_sal; 这段代码以annual_sal升序输出且正常执行没有报错。说明orderby......
  • Linux系统之安装mysql数据库
    (Linux系统之安装mysql数据库)一、查看系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"ANSI_......
  • 远程连接MySQL数据库
    远程连接MySQL数据库一、连接远程数据库:1、显示密码如:MySQL连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”mysql-h192.168.5.116-P3306-uroot-p1234562、隐藏密码如:MySQL连接本地数据库,用户名为“root”,C:/>mysql-hlocalhost-uroot-p......
  • 宝塔导入mysql数据库后,phpmyadmin可以登录,本地Navicat无法登录
    问题描述:宝塔导入mysql数据库后,phpmyadmin可以登录,本地Navicat无法登录问题排查:1.检查服务器3306端口是否开启,如果为云服务器,需要登录云服务器后台安全组设置开启;2.宝塔服务器页面设置对应的权限,安全起见一般设置指定IP访问。(很多Navicat无法访问就是因为权限未设置)  ......
  • MySQL存储过程入门使用
    一、存储过程概述存储过程的英文是StoredProcedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行......