MySQL进阶之索引

超详细图解!【MySQL进阶篇】存储过程,视图,索引,函数,触发器 超详细图解!【MySQL进阶篇】存储过程,视图,索引,函数,触发器1.1 下载Linux 安装包1.2 安装MySQL1.3 启动 MySQL 服务1.4 登录MySQL2\. 索引2.1 索引概述2.2 索引优势劣势2.3 索引结构2.3.1 BTREE 结构2.3.3 B+TREE 结构2.3.3 MySQL中的B+Tree2.4 索引分类2.5 索引语法2.5.1 创建索引2.5.2 查看索引2.5.3 删除索引2.5.4 ALTER命令2.6 索引设计原则3\. 视图3.1 视图概述3.2 创建或者 阅读详情

1 索引概述

  索引(index)是帮助MySOL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。image

  索引的优缺点

优势劣势
提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的 消耗。索引大大提高了查询效率,同时却也降低更新表的速度,如对表进 行INSERT、UPDATE、DELETE时,效率降低。

2 索引结构

2.1 介绍

  MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:

  • B+Tree索引:最常见的索引类型,大部分引擎都支持 B+树索引。
  • Hash索引:底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询。
  • R-tree(空间索引):空间索引是MVISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。
  • Full-text(全文索引):是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES,使用较少。

  以下是索引在不同存储引擎中的支持情况。我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。image

2.2 Btree

  研究B+树之前先看看二叉树。imageimage

  它把小于叶子节点的树放到左边,大的放到右边。但是二叉树有缺点,即顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级较深,检索速度慢。
  接着我们想到了红黑树。红黑树是一个自平衡的数据结构,虽然他解决了顺序插入问题,但是在大数据量情况下,层级较深,检索速度也慢。image

  于是引出了B树,又叫多路平衡查找树。
  下面的是一颗最大度数(max-degree)为5(5阶)的b-tree为例(每个节点最多存储4个key,5个指针),树的度数指的是一个节点的子节点个数。image

  下面以插入 100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 数据为例,参考一个网站可以动态构建。
  具体动态变化的过程可以参考网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.htmlimage
  插入的结果如下。image

2.3 B+tree

  以一颗最大度数(max-degree)为4(4阶)的b+tree为例。image
  和B树不同的是,B+树的所有元素都会出现在叶子节点。非叶子结点只起到索引的作用,叶子节点存放数据。叶子节点形成了单向链表,每个节点通过指针指向了下个元素。

  下面以插入 100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 数据为例。 通过网站动态构建结果如下。image

  MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。image

2.4 Hash

  哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。 如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。image

  Hash索引特点: 1. Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,...) 2. 无法利用索引完成排序操作 3. 查询效率高,通常只需要一次检索就可以了,效率通常要高于B+tree索引。
  存储引擎支持: 在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构 建的。

2.5 思考

  为什么InnoDB存储引擎选择使用B+tree索引结构?

  • 相对于二叉树,层级更少,搜索效率高;
  • 对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一 页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的 高度,导致性能降低;
  • 相对Hash索引,B+tree支持范围匹配及排序操作;

3 索引分类

image
  在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:image

  聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引。
  • 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
  • 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

image
  聚集索引低下挂的是行数据row,而二级索引低下挂的是主键id。用name查找演示如下。Arm先通过二级索引找到主键10,再回表查询通过聚集索引找到行数据row。image

思考题:
  InnoDB主键索引的B+tree高度为多高呢?
  假设:一行数据大小为1k,一页中可以存储16行这样的数据。InnoDB的指针占用6 个字节的空间,主键即使为bigint,占用字节数为8。
  高度为2:n * 8 + (n + 1) * 6 = 161024,算出n约为 1170,1171 16 = 18736。
  高度为3:1171 * 1171 * 16 = 21939856。
  存储两千多万的数据,树的结构也才3层。

4 索引语法

  创建索引

CREATE [ UNIOUE | FULLTEXT] INDEX index_name ON table_name (index_col_name....) ;

  查看索引

SHOW INDEX FROM table_name ;

  删除索引

DROP INDEX index_name ON table_name ;

  按照下列的需求,完成索引的创建
  1. name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。
  2. phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。
  3. 为profession、age、status创建联合索引。
  4. 为email建立合适的索引来提升查询效率。

CREATE INDEX idx_user_name ON tb_user(name);
CREATE UNIQUE INDEX idx_user_phone ON tb_user(phone);
CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,`status`);
CREATE INDEX idx_email ON tb_user(email);

  查看索引SHOW INDEX FROM tb_user ;image

5 SQL性能分析

5.1 SQL执行频率

  MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库 的INSERT、UPDATE、DELETE、SELECT的访问频次: SHOW GLOBAL STATUS LIKE 'Com_______';image

5.2 慢查询日志

  SQL性能分析 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。 MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

# 开启MySOL慢日志查询开关
show_query_log=1
# 设置慢日志的时间为2秒,SOL语句执行时间超过2秒,就会视为查询,记录慢查询日志
long_query_time=2

  配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log。
  重启mysql,查看慢查询日志是否打开。

SHOW VARIABLES LIKE 'slow_query_log';

5.3 show profile查看耗时操作

  show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持。
  profile操作:

SELECT @@have_profiling;

  默认profiling是关闭的,可以通过set语句在session/global级别开启profiling:

SET profiling = 1;

  执行一系列的业务SQL的操作,然后通过如下指令查看指令的执行耗时:

#查看每一条SOL的耗时基本情况
show profiles;
#查看指定query id的SQL语句各个阶段的耗时情况
show profile for query query_id;
#查看指定query id的SQL语句CPU的使用情况
show profile cpu for query query_id;

5.4 explain执行计划

  EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。
  语法:

# 直接在select语句之前加上关键字 explain/desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件

  EXPLAIN 执行计划各字段含义:

  • Id:select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行)。
  • select_type:表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、 UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等
  • type:表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_ref、ref、range、 index、all 。
  • possible_key:显示可能应用在这张表上的索引,一个或多个。
  • Key:实际使用的索引,如果为NULL,则没有使用索引。
  • Key_len:表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下, 长度越短越好 。
  • rows: MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的。
  • filtered:表示返回结果的行数占需读取行数的百分比, filtered 的值越大越好。

6 索引使用

6.1 最左前缀法则

  如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。 如果跳跃某一列,索引将部分失效(后面的字段索引失效)。

-- 三个字段长度分别是47、2、5,此查询走索引长度为54
explain select * from tb user where profession = '软件工程' and age = 31 and status = '0';
-- 此查询走索引长度为54,最左索引字段存在就行,和位置无关
explain select * from tb user where status = '0' and age = 31 and profession = '软件工程';
-- 走索引长度49
explain select * from tb user where profession ='软件工程' and age = 31;
-- 走索引长度47
explain select * from tb user where profession='软件工程'
-- 不走索引,全表扫描
explain select * from tb user where age = 31 and status = '0';
-- 不走索引,全表扫描
explain select * from tb user where status ='0';
-- 走索引长度47,只走profession,部分失效
explain select * from tb user where profession = '软件工程' and age = 31 and status = '0';

6.2 范围查询

  索引使用联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。

-- 查询右侧失效,长度49
explain select * from tb user where profession="软件工程’and age>30 and status='0';
-- 有等于号右侧就不失效,长度54
explain select * from tb user where profession="软件工程’and age >= 30 and status='0';

6.3 索引失效情况

(1)索引列运算:不要在索引列上进行运算操作,索引将失效。

-- 索引失效
explain select * from tb user where substring(phone,10,2)= '15'

(2)字符串不加引号:字符串类型字段使用时,不加引号,索引将失效。

explain select * from tb user where profession='软件工程' and age = 31 and status = 0;
-- 索引失效
explain select * from tb user where phone =17799990015;

(3)模糊查询:如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效

explain select * from tb user where profession like '软件%';
-- 索引失效
explain select * from tb user where profession like '%工程';
explain select * from tb user where profession like '%工%';

(4)or连接的条件:用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。

explain select * from tb user where id = 10 or age = 23;
explain select * from tb user where phone='17799990017' or age = 23;

  由于age没有索引,所以即使id、phone有索引,索引也会失效。所以需要针对于age也要建立索引。(5)数据分布影响:如果MySQL评估使用索引比全表更慢,则不使用索引。

select*from tb user where phone >='17799990005'
select*from tb user where phone >='17799990015',

6.4 SQL提示

  SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。
  use index:建议使用索引

explain select *from tb user use index(idx user pro) where profession ='软件工程'

  ignore index:忽略使用索引

explain select *from tb user ignore index(idx user pro) where profession='软件工程'

  force index:强制使用索引

explain select * from tb user force index(idx user pro) where profession='软件工程'

6.5 覆盖索引与回表查询

  尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少 select *的使用。

-- id,profession,age, status列都有建立的索引
-- using where; usingindex:查找使用了索引,但需要的数据都在索引列中,所以不需要回表查询数据
explain select id, profession from tb_user 
  where profession= '软件工程' and age = 31 and status = '0';
explain select id,profession,age, status from tb_user
  where profession= '软件工程' and age= 31 and status = '0',
explain select id,profession,age, status, name from tb_user
  where profession= '软件工程' and age = 31 and status = '0';
-- using index condition:查找使用了索引,但是需要回表查询数据
explain select * from tb_user
  where profession='软件工程' and age= 31 and status ='0';

  没有回表查询覆盖索引。imageimage
  以下查询进行了回表查询。image

6.7 前缀索引

  当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。

  语法

create index idx_xxxx on table_name(column(n));

  前缀长度
  可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。

select count(distinct email)/count(*) from tb_user;
select count(distinct substring(email,1,5))/ count(*)from tb_user;

  前缀索引的查询image

6.8 单列索引与联合索引

  单列索引:即一个索引只包含单个列。
  联合索引:即一个索引包含了多个列。
  在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议建立联合索引,而非单列索引。
  以下单列索引的情况,索引只会走第一个字段。

explain select id, phone,name from tb_user where phone= '17799990010' and name = '韩信'

image

  多条件联合查询时, 优化器会评估哪个字段的索引效率更高,会选择该索引完成本次查询。image

6.9 索引设计原则

  1. 针对于数据量较大(超过一百多万),且查询比较频繁的表建立索引。
  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
  3. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
  4. 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
  7. 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪 个索引最有效地用于查询。
mysql联合索引的底层原理,进阶加薪全靠它 *本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://docs.qq.com/doc/DSmxTbFJ1cmN。**本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://docs.qq.com/doc/DSmxTbFJ1cmN。**完整开源项目:docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **1R2dB)收录** 阅读详情

相关推荐

【Mysql进阶】5步轻松掌握MySQL隐藏索引,你还在显摆你的索引吗?

假设我们在创建users表时,直接在email列上定义隐藏索引。-- 创建表并定义隐藏索引通过以上五个步骤,相信你已经掌握了MySQL隐藏索引的使用技巧。合理地创建和管理隐藏索引是数据库优化的重要一环,可以显著提高查询性能,确保数据的快速检索。下次遇到查询性能问题时,不妨从本文的步骤入手,或许你会有意想不到的收获哦!

java专栏 1205

MYSQL高级(二)---索引

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特点查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高效查找算法,这种数据结构就是索引索引优缺点优势劣势提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低。.........

YSecret_Y的博客 598

SAP FICO CK40N批量发布标准价:常见报错排查与实战解决指南

本文详细解析了SAP FICO模块中CK40N批量发布标准价的常见报错及解决方案。从物料选择、成本核算到最终发布的全流程,提供了针对'已有标准成本估算记号'等典型报错的实战处理技巧,并分享了预防性维护与批量处理的高效方法,帮助财务人员提升工作效率。

weixin_29234509的博客 304

SELECT * from t_user where user_id = xxx,可以从那几个点去优化这句sql

1. 索引优化:通过为查询涉及的列添加合适的索引,可以提高查询的效率。6. 数据库配置优化:检查数据库的配置参数,例如内存大小、连接池大小等,确保其能够满足查询的需求。4. 数据库缓存:通过合理使用数据库缓存,可以减少数据库的查询次数,从而提高查询效率。7. 数据库硬件升级:如果数据库的性能问题无法通过软件优化解决,可以考虑升级数据库服务器的硬件,例如增加内存、CPU等。以上是一些常见的SQL查询优化方法,具体选择哪些方法取决于实际情况,可以根据具体的数据库、表结构、数据量等进行调整。

m0_47999208的博客 1101

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 637

500道C++面试高频题解析(附答案、实战示例与进阶追问)

本文提供500道C++面试高频题的详细解析,涵盖基础概念到进阶应用,包括面向对象编程、内存管理、现代C++特性、并发编程等核心考点。每道题配有实战示例和进阶追问,帮助开发者突破八股文局限,掌握解决实际问题的能力,适合准备C++技术面试的工程师系统复习。

weixin_29002595的博客 310

Python连接sqlite数据库,查询报错 sqlite3.OperationalError: no such table: userInfo

Python连接sqlite数据库,查询报错 sqlite3.OperationalError: no such table: userInfo 。 原因: 1、数据库并没有建立该表。 2、程序没有找到该数据库中有该表。 这种情况是,该表已经建立,但通过以下语句进行查询: select name from sqlite_master where type='table' order by name; 查询的结果如果是 [ ] 空,但是你可以点击数据表能看到数据,这就是数据库里面的表没有被检

Mercury_Lc的博客 3990

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 608

MySql学习总结

MySql学习总结 指标 TPS Transactions Per Second (每秒传输的事务处理个数),这个指服务器每秒处理的事务数,支持事务的存储引擎如InnoDB等特有的一个性能指标。 QPS Queries Per Second (每秒钟查询处理) 同时适应与InnoDB和MyISAM引擎 等待时间: 执行Sql等待放回结果之间的等待时间 TPS =(COM_COMMIT + CO...

qq_30561643的博客 441

MT6816角度传感器SPI通信避坑指南:从数据手册到稳定读取的3个关键步骤

本文详细解析了MT6816角度传感器SPI通信中的常见问题与解决方案,包括寄存器地址计算、SPI时序配置和数据校验等关键步骤。通过实测波形和代码示例,帮助工程师避开数据手册中的隐藏陷阱,实现稳定可靠的角度数据读取,特别适用于高精度电机控制场景。

weixin_42520573的博客 516

MATLAB 与 STK 互联导出导弹轨迹及速度数据(csv导出)

本文介绍了如何通过 MATLAB 脚本连接 STK 提取导弹三维轨迹数据,并以 CSV 格式导出,包含以下关键内容:自动连接 STK 场景;获取所有导弹对象;提取 J2000 坐标系下的位置和速度;加入任务优先级与状态;导出为标准 CSV 文件;

weixin_52370774的博客 778

MySQL进阶-----SQL提示与覆盖索引

MySQL进阶篇的索引部分基本上要结束了,这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先,剩下的内容就下一期作为完结篇讲解。

m0_73633088的博客 1260

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2846

MySQL进阶之路十一(视图,索引)

.视图 i 什么是视图,数据库兑现,他是一个虚拟表,底层并非以键值形式保存数据,在执行的过程中, 动态的从基表中获取数据。(视图以表为底层来查询) ii 视图基本语法 #查询班级id为1 的所有学生信息 create view view_student as select *from student where cid = 1 with check opti...

ZhaiAlan的博客 240

Python爬虫实战:基于最新技术栈的政府招标采购数据抓取与分析

对于企业、研究人员和数据分析师来说,能够高效地获取这些数据意味着可以获得宝贵的商业洞察和市场先机。随着反爬技术的不断升级和网站结构的日益复杂,传统的爬虫方法已经难以满足需求。我们将采用Selenium、Playwright等现代浏览器自动化工具,结合Scrapy框架和异步请求库,构建一个能够应对各种反爬措施的强大爬虫系统。Playwright是微软开发的浏览器自动化工具,支持Chromium、WebKit和Firefox,比Selenium更快速、更稳定。

2201_76125261的博客 1310

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL进阶——索引

在上篇文章我们学习了MySQL进阶——SQL性能分析,这篇文章我们学习MySQL进阶——索引。

霖hero 878

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Mysql进阶-索引篇

连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。引擎层存储擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。

m0_59230408的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【MySQL进阶】索引

创建索引可以大幅提高查询性能,但需要根据具体应用场景和查询模式来合理创建索引。避免不必要的索引,选择性高的列和常用的查询条件、排序、连接、分组列是创建索引的主要考虑因素。

2401_83045332的博客 1020

MySQL进阶 索引

此处构建了name的单列索引,此时通过name查询能获取name和id的值,若是查询条件中含有这两个之外的字段,就会发生回表查询,即通过获取的id值在聚集索引中获取一整行(row)的值,然后再输出。n值可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。

2401_88743650的博客 708

【MySQL进阶篇】索引

索引(Index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

2401_83283514的博客 2393

MySQL查询优化从基础索引到覆盖索引的进阶实战

从基础索引到覆盖索引的进阶,是MySQL查询优化的重要一步。基础索引通过减少数据扫描范围来提高查询性能,而覆盖索引通过消除回表操作进一步提升了查询效率。在实际应用中,应根据具体查询需求精心设计覆盖索引,平衡查询性能与维护成本。通过理解这些索引技术的工作原理和应用场景,您可以显著提升数据库查询性能,为应用程序提供更好的用户体验。

ddj627843217的博客 734

MYSQL-进阶-索引

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

qq_58378409的博客 1073

Mysql进阶之索引

索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的 示意图 所示 : 左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向

hjdudu的博客 333
上一篇: SQL Server报错:数据库"YourDatabaseName"的事务日志已满,原因为"LOG_BACKUP"
下一篇: ASP.NET Core应用程序9:使用内置的标签助手
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值