2.6.7 前缀索引当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。1). 语法create index idx_xxxx on table_name(colu ......
262
0
0
2022-11-23
2.6.6 覆盖索引尽量使用覆盖索引,减少select *。那么什么是覆盖索引呢?覆盖索引是指 查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到 。接下来,我们来看一组SQL的执行计划,看看执行计划的差别,然后再来具体做一个解析。explain select id, profession from tb_user where profession ......
303
0
0
2022-11-23
2.6.5 SQL提示目前tb_user表的数据情况如下:索引情况如下:把上述的 idx_user_age, idx_email 这两个之前测试使用过的索引直接删除。drop index idx_user_age on tb_user; drop index idx_email on tb_user; A. 执行SQL : explain select ......
315
0
0
2022-11-23
3.6.4.4 or连接条件用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。explain select * from tb_user where id = 10 or age = 23; explain select * from tb_user where phone = '17799990017' ......
307
0
0
2022-11-23
2.6.3 范围查询联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。explain select * from tb_user where profession = '软件工程' and age > 30 and status = '0'; 当范围查询使用> 或 < 时,走联合索引了,但是索引的长度为49,就说 ......
289
0
0
2022-11-23
2.6 索引使用2.6.1 验证索引效率在讲解索引的使用原则之前,先通过一个简单的案例,来验证一下索引,看看是否能够通过索引来提升数据查询性能。在演示的时候,我们还是使用之前准备的一张表 tb_sku , 在这张表中准备了1000w的记录。这张表中id为主键,有主键索引,而其他字段是没有建立索引的。我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQ ......
341
0
0
2022-11-23
2.5.3 profile详情show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:SELECT @@have_profiling ; 可以看到,当前MySQL是支持 profile操作的,但是开关是关闭的。可以通过set语句在session ......
314
0
0
2022-11-23
2.5 SQL性能分析2.5.1 SQL执行频率MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次:-- session 是查看当前会话 ; -- global 是查询全局数据 ; SH ......
275
0
0
2022-11-23
2.4 索引语法1). 创建索引CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name,... ) ; 2). 查看索引SHOW INDEX FROM table_name ; 3). 删除索引DROP INDEX index_name ON table_ ......
315
0
0
2022-11-23
2.2.5 HashMySQL中除了支持B+Tree索引,还支持一种索引类型---Hash索引。1). 结构哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。2). 特点A. Hash索 ......
270
0
0
2022-11-23
2.2.3 B-TreeB-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key,5个指针:我们可以通过一个数据结构可视化的网站来简单演示一下。https://www.cs.usfca.edu/~galles/visua ......
276
0
0
2022-11-23
2.2 演示表结构及其数据如下:假如我们要执行的SQL语句为 :select * from user where age = 45;1). 无索引情况在无索引情况下,就需要从第一行开始扫描,一直扫描到最后一行,我们称之为 全表扫描,性能很低。2). 有索引情况如果我们针对于这张表建立了索引,假设索引结构就是二叉树,那么也就意味着,会对age这个字段建立一个二 ......
299
0
0
2022-11-23
1.3.2 MyISAM1). 介绍MyISAM是MySQL早期的默认存储引擎。2). 特点不支持事务,不支持外键支持表锁,不支持行锁访问速度快3). 文件xxx.sdi:存储表结构信息xxx.MYD: 存储数据xxx.MYI: 存储索引1.3.3 Memory1). 介绍Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这 ......
302
0
0
2022-11-23
1.3 存储引擎特点上面我们介绍了什么是存储引擎,以及如何在建表时如何指定存储引擎,接下来我们就来介绍下来上面重点提到的三种存储引擎 InnoDB、MyISAM、Memory的特点。1.3.1 InnoDB1). 介绍InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的MySQL 存储引擎。2). 特点DM ......
293
0
0
2022-11-23
1.2 存储引擎介绍大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎一样。而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要 ......
326
0
0
2022-11-23