mysql索引优化-01
1.1索引是什么?
mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构。
mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构给以某种引用或者说指向表中的数据,这样我们就可以通过数据结构上实现高级的查找算法来快速查找到我们想要的数据。这种数据结构就是索引。
我们可以简单的理解索引就是“排好序的可以快速查找数据的数据结构!”,类似于新华字典的一个目录。
1.2索引数据结构
下图就是可能的二叉树的索引方式:左边的是表,总共有2列数据。如果sql查询的条件是where col2 = 89,如果不使用索引的话,那么会一直进行for循环一次一次往下找,那么这里的例子就会找6次,在第6次才会找到这个值,而是用数据结构的话,那么只需要对比1次,刚好比34大,这种情况就直接找到了,对于大数据量来说,这种方式会高效很多!
这种二叉树的弊端:当极端情况下,数据进行递增插入的时候,会一直向右边进行插入,形成链表,查询的效率会降低!因为又会开始进行遍历了。

mysql中常用的数据结构有BTree(Myisam普通索引),B+Tree索引(Innodb普通索引),Hash索引(memory存储引擎)等,但是一般都是使用的Innodb存储引擎。
1.3为什么要使用索引?
提高数据检索的效率,降低数据的IO成本。
通过索引来对数据进行排序,降低数据排序的成本,可以降低CPU的消耗。
1.4索引这么好,那有什么缺点呢?
索引实际上也是一张表,保存的主键和索引的字段,并且指向实体表的记录,所以索引也是需要占用空间的。在索引大大提高查询速度的时候,缺会降低表的更新速度,在对表进行数据CRUD的时候,mysql不仅要更新数据,还需要保存索引文件信息。每次更新添加了索引的列的字段的时候都会去调整因为更新所带来的减值变化后的信息。这些都是需要消耗时间和空间。
1.5索引的使用场景是什么呢?
1.5.1适合创建索引的场景
1.主键自动建立的唯一索引
2.频繁作为查询条件的字段应该创建索引(where 后面的语句)
3.查询中与其他表关联的字段,外键关系建立索引。
4.多字段查询下倾向创建组合索引
5.查询中排序的字段,排序字段若通过索引去访问将大大提高排序的速度
6.查询中统计或者分组的字段
1.5.2 不适合创建索引的场景:
1. 表的记录太少
2. 经常增删改的表
3.where 条件里面用不到的字段不建立索引
1.6索引的分类(重点学习)
1.6.1主键索引
1.表中的列添加了主键的约束之后,数据库会自动的建立主键索引
2.单独创建主键索引和删除主键索引的语法:
alter table 表名 add primary key (字段)
drop table 表名 drop primary key
1.6.2 唯一索引
1.表中的列创建了唯一约束时,数据库会自动创建唯一索引。
2.单独创建和删除唯一索引语法:
alter table 表名 add unique on 表名(字段)
或者 create unique index 索引名 on 表名(字段)
drop index 索引名 on 表名
1.6.3 单值索引
单值索引就是一个索引只包含单个列,一个表可以有多个单值索引。
1.建表的时候可以随着表一起建立单值索引
2.单独创建和删除单值索引:
alter table 表名 add index 索引(字段)
或者 create index 索引名 on 表名(字段)
1.6.4符合索引
符合索引就是一个索引包含了多个列:
1.建表的时候可以随着表一起进行简历复合索引
2.单独创建索引和删除复合索引:
create index 索引名 on 表名(字段1,字段2)
或者 alter table 表名 add index 索引名(字段1,字段2)
删除复合索引:drop index 索引名 on 表名
mysql索引优化-01的更多相关文章
- Mysql 索引优化分析
MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...
- mySql索引优化分析
MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...
- mysql索引优化
mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...
- 知识点:Mysql 索引优化实战(3)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...
- MySQL索引优化步骤总结
在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...
- MySQL索引优化看这篇文章就够了!
阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...
- mysql索引优化比普通查询速度快多少
mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...
- 【ZZ】MySQL 索引优化全攻略 | 菜鸟教程
MySQL 索引优化全攻略 http://www.runoob.com/w3cnote/mysql-index.html
- mysql数据库优化课程---17、mysql索引优化
mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...
- MYSQL索引优化思维导图
有关索引的优化.MYSQL索引优化 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing
随机推荐
- python线程之event事件
from threading import Thread, Event import time event = Event() def light(): print('红灯亮着,所有车都要等待') t ...
- 更新pip遇到的问题及解决方法
问题ython -m pip install --upgrade pip --user D:\APP\Anaconda3\python.exe: No module named pip解决方法 pyt ...
- subprocess,哈希,日志模块
hashlib模块: # 1. 先确定你要使用的加密方式: md系列,sha系列 md5 = hashlib.md5() # 指定加密方式 # 2. 进行明文数据的加密 data = 'hello12 ...
- day18:json模块&time模块&zipfile模块
json模块 1.关于json的定义 所有的编程语言都能够识别的数据格式叫做json,是字符串能够通过json序列化成字符串与如下类型: (int float bool str list tuple ...
- Deep-DRM算法理解
title: GCN学习笔记 categories: - 生物信息学 date: 2023-03.13 hidden: true mathjax: true GCN GCN(Graph Convolu ...
- 卸载wamp忘记备份MySql,如何恢复MySql数据
大家把wamp卸载了,但是数据库忘记备份了.怎么办?不要急,不要慌!打开wamp所在目录(前提是你没有删),你会发现wamp特别良心的帮你把MySql的data文件夹留下来了,这个时候你只要把这个文件 ...
- LeetCode 周赛 341 场,模拟 / 树上差分 / Tarjan 离线 LCA / DFS
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末有单双周赛,双周赛我们讲过了,单周赛那天早上有事没参加,后面做了虚拟竞赛,然后整个 ...
- [操作系统] - 进程状态&进程描述
2.1 进程(Process) 2.1.1 定义 chatGPT版:一个具有独立功能的程序关于某个数据集合的一次运行活动 人话版:程序在并发环境中的执行过程& 进程是程序的一次执行 2.1.2 ...
- vue2项目中调取登录接口登录以后获取个人信息以后,储存在哪里,怎么在不同的页面展示想要的信息?
在Vue2项目中,可以将个人信息存储在Vuex状态管理中或者浏览器的本地存储中,具体取决于项目的需求和规模. 1. Vuex状态管理 在Vuex中定义一个user模块,用于存储用户信息,可以在登录成功 ...
- StringBuilder类用法解析
一.StringBuilder说明 StringBuilder是一个可变的字符序列.这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而 ...