MySQL索引那些事儿

mysql索引的那些事儿 mysql索引的那些事儿mysql索引如何定位并优化慢查询Sql如何定位并优化慢查询Sql mysql索引 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 索引的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UP 阅读详情

1.B+树

  • 一个节点有多个元素
  • 所有元素都在叶子节点冗余
  • 叶子节点间有指针且有序

推荐一个B+树演示网站 https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

2.InnoDB数据引擎中的页

默认页大小为16kb

mysql> show global status like 'Innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.01 sec)

mysql> select 16384/1024;
+------------+
| 16384/1024 |
+------------+
|    16.0000 |
+------------+
1 row in set (0.01 sec)

3.主键索引

创建表,并插入数据

CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` int(11) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  `e` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t1` 
VALUES 
('6', '6', '4', '4', 'f'), 
('1', '1', '1', '1', 'a'), 
('2', '2', '2', '2', 'b'), 
('7', '4', '5', '5', 'g'), 
('4', '3', '1', '1', 'd'), 
('5', '2', '3', '6', 'e'), 
('3', '3', '2', '2', 'c'), 
('8', '8', '8', '8', 'h');
COMMIT;

以主键数据创建的B+树,即主键索引

查询索引

mysql> show index from t1;

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t1    |          0 | PRIMARY  |            1 | a           | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)
  • 如果建表时,
    • 有主键,建立主键索引
    • 无主键
      • 先判断是否有唯一索引
        • 如果有唯一索引,创建唯一索引
        • 如果没有唯一索引,创建一个隐藏字段作为唯一索引,即rowid

了解了主键索引,就可以顺理成章的分析出,使用uuid作为主键的劣势了:

  • uuid占用空间大,在存储相同数据量的情况下,需要使用更多的页来存储,影响了B+树的高度,影响查询效率。
  • uuid无需,相较于自增主键,每次插入都要重新排序。

4.联合索引

mysql> create index idx_t1_bcd on t1(b,c,d);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from t1;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t1    |          0 | PRIMARY    |            1 | a           | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| t1    |          1 | idx_t1_bcd |            1 | b           | A         |           6 |     NULL | NULL   | YES  | BTREE      |         |               |
| t1    |          1 | idx_t1_bcd |            2 | c           | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |
| t1    |          1 | idx_t1_bcd |            3 | d           | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.00 sec)

按照bcd的值创建B+树,在叶子节点上,把这条数据对应的主键a的值也关联上,对应起来。

当select后字段不在abcd字段里时,需要根据查到的主键值二次查询,就是平时我们说的回表。

在这里就可以看到,为什么要有“最左前缀原则”了,因为如果查询是最左侧的不能确定,没办法从在B+树上确定位置,就没有办法走索引了。

 

5.几个具体实例

5.1 key_len值

mysql> explain select * from t1 where a = 3;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | t1    | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from t1 where b = 1 and c = 1 and d = 1;
+----+-------------+-------+------------+------+---------------+------------+---------+-------------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key        | key_len | ref               | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------------+---------+-------------------+------+----------+-------+
|  1 | SIMPLE      | t1    | NULL       | ref  | idx_t1_bcd    | idx_t1_bcd | 15      | const,const,const |    2 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------------+---------+-------------------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from t1 where b = 1 and d = 1;
+----+-------------+-------+------------+------+---------------+------------+---------+-------+------+----------+-----------------------+
| id | select_type | table | partitions | type | possible_keys | key        | key_len | ref   | rows | filtered | Extra                 |
+----+-------------+-------+------------+------+---------------+------------+---------+-------+------+----------+-----------------------+
|  1 | SIMPLE      | t1    | NULL       | ref  | idx_t1_bcd    | idx_t1_bcd | 5       | const |    2 |    14.29 | Using index condition |
+----+-------------+-------+------------+------+---------------+------------+---------+-------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)

3条SQL语句

  • 第1条走主键索引
    • 其中key_len长度为4,int类型在MySQL中占4字节
  • 第2条走bcd联合索引
    • 其中key_len长度为15,int类型在MySQL中占4字节,再加上可能为null的情况(MySQL需要1个字节来标识NULL),而且此次查询使用到了bcd3个字段,所以(4+1)*3=15
  • 第3条走bcd联合索引
    • 其中Extra,Using index condition,即没有全部使用到bcd3个字段,只用到了b字段
    • key_len长度为15,int类型在MySQL中占4字节,再加上可能为null的情况(MySQL需要1个字节来标识NULL),4+1=5

5.2 回表

mysql> explain select * from t1 where b > 1; 
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | t1    | NULL       | ALL  | idx_t1_bcd    | NULL | NULL    | NULL |    7 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from t1 where b > 7;
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-----------------------+
| id | select_type | table | partitions | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | t1    | NULL       | range | idx_t1_bcd    | idx_t1_bcd | 5       | NULL |    1 |   100.00 | Using index condition |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)

两条SQL语句,差异只在b大于的常量值,但是第1条没走索引,第2条走索引了。

这里是索引优化器,在走索引或全表扫描二选一的结果。

如果走索引,回表次数过多时,性能可能还不如直接全表扫描。

5.3 覆盖索引

mysql> explain select * from t1 where b > 1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | t1    | NULL       | ALL  | idx_t1_bcd    | NULL | NULL    | NULL |    7 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select b,c,d from t1 where b > 1;
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
| id | select_type | table | partitions | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra                    |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
|  1 | SIMPLE      | t1    | NULL       | index | idx_t1_bcd    | idx_t1_bcd | 15      | NULL |    7 |   100.00 | Using where; Using index |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select b,c,d,a from t1 where b > 1;
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
| id | select_type | table | partitions | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra                    |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
|  1 | SIMPLE      | t1    | NULL       | index | idx_t1_bcd    | idx_t1_bcd | 15      | NULL |    7 |   100.00 | Using where; Using index |
+----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+--------------------------+
1 row in set, 1 warning (0.00 sec)

第1条SQL查询*所有字段,查询出来后需要回表,索引优化器对比后,发现全表扫描比先索引再回表性能更优,直接全表扫描。

第2条走bcd联合索引,比较好理解。

第3条,也走bcd联合索引,因为在bcd联合索引的B+树上,关联了主键索引,而且查询的是bcda字段,所以不需要回表,直接走索引就可以查询出来,也就是平时所说的“覆盖索引”。

覆盖索引(Covering Index):包含所有满足查询需要数据的索引。

5.4 类型转换

在MySQL中,会默认把字符转换为数字,如果字符不是数字,则转换为0。

mysql> select 0='0';
+-------+
| 0='0' |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

mysql> select 0='1';
+-------+
| 0='1' |
+-------+
|     0 |
+-------+
1 row in set (0.01 sec)

mysql> select 0='a';
+-------+
| 0='a' |
+-------+
|     1 |
+-------+
1 row in set, 1 warning (0.00 sec)

mysql> select 0='ab';
+--------+
| 0='ab' |
+--------+
|      1 |
+--------+
1 row in set, 1 warning (0.00 sec)

插入1条数据

INSERT INTO `t1` VALUES ('0', '9', '9', '9', 'i');
mysql> select * from t1 where a = 'abcd';
+---+------+------+------+------+
| a | b    | c    | d    | e    |
+---+------+------+------+------+
| 0 |    9 |    9 |    9 | i    |
+---+------+------+------+------+
1 row in set, 1 warning (0.00 sec)

mysql> select * from t1 where a = 0;
+---+------+------+------+------+
| a | b    | c    | d    | e    |
+---+------+------+------+------+
| 0 |    9 |    9 |    9 | i    |
+---+------+------+------+------+
1 row in set (0.00 sec)

MySQL会自动把'abcd'转换为0,所以以上2条SQL等价,都把a=0的数据查询出来了。

5.5 索引及类型转换

给e字段增加索引

create index idx_t1_e on t1(e);
explain select * from t1 where a = 1; 	-- 走索引
explain select * from t1 where a = '1';	-- 走索引
explain select * from t1 where e = 1;	-- 不走索引
explain select * from t1 where e = '1';	-- 走索引
  • 对于1、2SQL来讲,a字段为int类型
    • 等号右侧为数字时,不需要类型转换,直接走索引
    • 等号右侧为字符时,会自动转换为数字,类型一致,走索引
  • 对于3、4SQL来讲,e字段为varchar类型
    • 等号右侧为数字时,没办法从数字转换为字符,等号左侧为字符,右侧为数字,只能将e字段转换为数字,因为B+树中存储的是字符,类型不一致导致无法比对,只能全表扫描
    • 等号右侧为字符时,不需要类型转换,直接走索引
mysql> explain select * from t1 where a = 1;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | t1    | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from t1 where a = '1';
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | t1    | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from t1 where e = 1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | t1    | NULL       | ALL  | idx_t1_e      | NULL | NULL    | NULL |    9 |    11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 3 warnings (0.00 sec)

mysql> explain select * from t1 where e = '1';
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key      | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | t1    | NULL       | ref  | idx_t1_e      | idx_t1_e | 63      | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

在where子句中,等号左侧,不要对字段进行运算或操作,否则无法走索引,导致全表扫描,性能下降。

 

为什么无序的UUID会导致入库性能变差呢? 1.无序,无法预测他的生成顺序,不能生成递增有序的数字。 首先分布式id一般都会作为主键,但是安装mysql官方推荐主键要尽量越短越好,UUID每一个都很长,所以不是很推荐。 2.主键,ID作为主键时在特定的环境会存在一些问题 比如做DB主键的场景下,UUID就非常不适用Mysql官方有明确的建议主键要尽量越短越好36个字符长度的UUID不符合要求。 3.索引,B+树索引的分裂 既然分布式id是主键,然后主键时包含索引的,然后mysql的索引是通过b+树来实现的,每一次新的UUID数据的插入,为了查询的优化 阅读详情

相关推荐

使用UUID作为MySQL主键的限制及替代方案

如果您决定使用UUID作为主键,请考虑使用UUID_SHORT函数、自增长整数和UUID的组合,或者数据库生成的UUID作为替代方案。这意味着当使用UUID作为主键时,数据在磁盘上的物理排序可能会变得混乱,从而导致随机IO操作增加,影响查询性能。存储空间占用:UUID是一个128位长的字符串,相对于使用整数类型作为主键,它会占用更多的存储空间。通过使用数据库生成的UUID,您可以确保在数据库层面上实现全局唯一性,并避免了将UUID从应用程序传递到数据库的额外开销。二、UUID作为MySQL主键的限制。

QvisCs的博客 838

数据库主键为什么要用递增的序列?UUID为什么不适合做主键?

数据库主键为什么要用递增的序列? 顺序的ID占用的空间比随机ID占用的空间小。 原因是数据库主键和索引索引使用B+树的数据结构进行存储,顺序ID数据存储在最后一个节点的最后的位置,前面的节点数据都是满的。随机ID存储时可能会出现节点分裂,导致节点多了,但是每个节点的数据量少了,存储到文件系统中时,无论节点中数据是不是满的都会占用一页的空间。所以所导致空间占用较大。 UUID为什么不适合做主键? UUID值由本机Mac地址和时间戳等因素决定,UUID出现重复概率极几乎可以忽略不计。 如果需求是只保证唯一性,那

杰森写代码 1425

EGO_Plannerv2代码学习(一):栅格建图之V1 V2的区别

最近在尝试将高飞老师的集群规划器部署到真实无人机上跑一下,开这个新帖记录下学习过程中的问题和想法。

qq_41069236的博客 5749

MySQL不建议使用UUID作为主键的原因

前言 以前只知道UUID不适合作为主键,但是不知道具体原因,最近做了了解,在此做一个记录 索引 我们先了解一下mysql索引的数据结构,mysql在innodb的存储引擎下是使用B+树来做为索引的数据结构的,而一个表最终必定会创建一个主键索引,即是没有设置主键也会有生成规则(先查找有没有非空的唯一索引,没有则可以使用默认的rowid字段创建索引) mysql中存储数据的最小单元称之为page(页),大小为16KB,也就是在索引的结构中一个page存储了很多个数据,看下图 我们首先知道索引采用B+树的结构后,

qq_31086797的博客 5021

生信人填坑记 orthofinder的安装和基础使用

其中常用的有两个结果,第一个是Orthogroups文件夹下的Orthogroups.GeneCount.tsv,这个文件里保存着每个家族在每个物种里的成员数量。(写到这儿饭点到了,吃饭要紧…在国内使用conda的同学我相信很多人都会遇到-|- -|- -|- -|- -|- -|- -|- -|- 一直转圈。软件的是由很简单,将你要跑的物种的蛋白质文件放在work/data目录下,文件名都用物种缩写,后缀统一就行。当然,很多软件都会自带一个这样的文件,conda装不了的时候可以去软件官网溜达溜达。

qq_43337286的博客 5381

新能源汽车动力总成研发测试技术全景深度报告(2025版)

本文所有企业案例数据均来自上市公司财报、工信部备案信息及权威媒体报道,技术参数经第三方检测报告交叉验证。研发测试人员能力矩阵重构(T型人才进阶路径)[10] 全球动力总成市场2035年预测报告。[9] NI电动汽车HIL测试架构技术文档。[3] 东风汽车智能化研发体系深度报告。[5] 混合动力测功机发明专利技术细节。[1] 领克动力总成试验中心技术解析。[7] 新能源汽车产业迭代趋势白皮书。测试架构师-数字工程。测试架构师-安全合规。测试架构师-人工智能。

优快云-新能源汽车研发测试专业博主 776

使用UUID的劣势

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33910460的博客 781

【系统分析师】写作框架:软件设计模式及其应用

本文围绕"软件设计模式及其应用"展开论述。首先介绍了近三年参与的某软件开发项目背景及个人承担的系统设计工作。其次系统阐述了设计模式的三大分类:创建型(如工厂方法、单例模式)、结构型(如适配器、装饰器模式)和行为型(如观察者、策略模式),重点分析了各类模式的特点和典型应用场景。最后结合项目实践,详细说明了采用的三种设计模式的具体实施过程及效果,包括提高代码复用性、降低耦合度等优势。文章还总结了项目经验,指出存在的不足及改进方向,强调合理运用设计模式对构建高质量软件系统的重要性。全文通过理论

数据知道的博客 5060

聊聊 MySql 索引那些事儿

来源:my.oschina.net/luozhou/blog/3030583 概述 上一篇文章《一条SQL语句在MySQL中是如何执行的》我们聊到了sql语句内部的执行,包括InnoDB引擎是如何支持事务的,如何做到可以备份恢复的,那么今天我们来聊一聊MySql索引的那些事,在这篇文章中,我会主要聊聊InnoDB下索引的数据结构,索引如何起作用的,如何更好的利用索引提高效率。 一、什...

勇往直前的专栏 361

使用 MATLAB/Simulink 构建一个 压水堆核电机组的反应堆控制与功率调节系统 仿真模型

本文通过Simulink构建压水堆核电机组的反应堆控制与功率调节模型,详细介绍了建模流程:从中子点动力学核心方程、反应性反馈模型(控制棒、多普勒和慢化剂效应)、一回路热工模型到完整的闭环控制系统。教程包含系统结构设计、参数设置、模块连接方法,以及典型负荷变化场景的仿真分析,帮助读者理解核反应堆动态特性和控制原理。同时提供了进阶建模建议,如分布参数模型和先进控制策略的应用。该模型为教学简化版,强调核能系统的机理建模与Simulink实现方法,适合核工程与控制领域的学习者参考实践。

amy_mhd的博客 186

将Dify平台开发的工作流集成到Open WebUI中

将Dify开发的工作流集成到Open WebUI是一个能够显著增强AI应用交互能力和业务逻辑深度的有效途径。其核心在于通过API建立两者间的通信桥梁,并确保API在格式、协议和行为上的一致性,特别是向OpenAI Chat API规范看齐。最简单直接的路径是利用Dify的“对话型”或“Agent型”应用,这类应用的API设计更倾向于满足Open WebUI这类聊天前端的期望。然而,面对复杂的现实场景,直接的完美兼容并非总是唾手可得。

形上得其象,形下合于数;阴阳自济,玄理自明。 2030

深入浅出Mysql索引的那些事儿

文章来源:公众号:猿人谷 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。 在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响不大。但是当数据量和访问量剧增的时候,就会发现mysql变慢,甚至down掉,这就必须要考虑优...

oschina_40914891的博客 902

YOLOv11数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强

本文介绍了YOLOv11目标检测中的数据集增强技术,重点解决图像与标注标签同步扩充的关键问题。文章系统分析了三类增强方法:几何变换(翻转、旋转、缩放)、颜色变换(亮度、对比度调整)和高级增强(Mosaic、MixUp),并探讨了其在小样本检测、复杂场景泛化和多方向目标识别等场景的应用价值。针对核心的标签同步问题,提供了基于Python和OpenCV的详细代码实现示例,展示如何对图像进行水平翻转和缩放操作时精确调整YOLO格式边界框坐标。该技术能有效解决训练数据不足和多样性匮乏问题,显著提升模型的泛化性能。

走向CTO的路上... 1511

MySQL索引的那些事儿

索引是mysql数据库中比较重要的知识点,相信很多人都有一定的了解,在这里我做一下总结,建立一下mysql索引知识体系。 一,索引概念和索引模型 Q1: 你能说说什么是索引吗? A: 索引是一种能够帮助我们快速检索数据库中的数据的数据结构。 Q2: 索引具体采用哪种数据结构呢? A: mysql默认的存储引擎是InnoDB;InnoDB存储引擎,默认的是B+树。 拓展: B+Tree索引和Hash索引区别? 哈希索引适合等值查询,但是无法进行范围查询; 哈希索引没办法利用索引完成排序 ; 哈希

a1043362562的专栏 211

汽车行业OTD业务模式入门学习

本文是在学习彭俊松老师的《汽车行业整车订单交付系统》后,对于OTD理解的一些摘录,供诸位参考学习。

qq_40664711的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL索引的那些事儿~

前缀索引 MySQL有时候需要索引很长的字符串,这会让索引变的大且慢,通常情况下可以使用某个列开始的部分字符串,这样大大的节约索引空间,从而提高索引效率,下面举例说明如何选取索引前缀。 –查找最常见的城市列表,发现每个值都出现45-65次 mysql> select count(*) as cnt,city from citydemo group by city order by cnt desc limit 10; +-----+--------------------+ | cnt | city

程序员小金的博客 224

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《MySql索引》之你不知道的那些事儿

文章目录一、索引的类别二、索引的创建原则三、索引的管理和使用1、查看索引2、新增索引3、删除索引4、EXPLAIN语句 一、索引的类别 由于本文是基于mysql的InnoDB存储引擎,索引我们主要看第一个表格,其他的表格可以自行的观看,都不难,从表格我们可以看出来,InnoDB存储引擎索引只支持BTREE类型的索引,索引的类别有Primary Key,Unique,Key,FULLTEXT和SPATIAL。当然也有其他的分法,按照索引列的数量分为单列索引和组合索引。 Primary Key(聚集索引):

小东呱呱 394

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql中b树索引与b+树索引的那些事儿

MySQL主要使用B+树索引(如InnoDB引擎),它与B树在结构和性能上有显著差异。B树数据存储在所有节点,而B+树仅叶子节点存储数据,非叶子节点为索引;B+树的叶子节点通过链表连接,使其范围查询效率更高(只需遍历链表)。B+树的优势包括:更稳定的索引结构、更高的磁盘IO性能、更好的范围查询支持。MySQL选择B+树因其更适合数据库场景,特别是InnoDB引擎的高效排序和范围查询需求。相比之下,B树的查询路径不固定,范围查询效率较低。

bojinyuan00的博客 1226

索引那些事儿----基于Mysql

目录背景索引存储引擎存储引擎种类MyISAM引擎InnoDB引擎索引方式索引类型单列索引之普通索引单列索引之唯一索引单列索引之主键索引组合索引全文索引空间索引总结 武汉加油!!! 背景 数据库是什么? 这个问题大家都知道吧, 用来存放数据的, 生活中你在银行中存的金额, 或者一个户籍所中存放的户籍以及个人信息, 在比如一个学校的学生信息等等, 这些都存放在我们的数据库里面. 对不数据库中的数...

GQ_YIN日常记录 925

mysql索引记录数_今天重新聊聊MySql索引的那些事儿

概述今天我们来聊一聊MySql索引的那些事,在这篇文章中,我会主要聊聊InnoDB下索引的数据结构,索引如何起作用的,如何更好的利用索引提高效率。一、什么是索引数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。就像我们以前用的新华字典的目录一样,能帮助我们快速查询到某一个字。二、索引的分类分类角度索引名称数据结构B+树,Hash索引,R-Tree等存储层面聚簇索...

weixin_28882907的博客 221
上一篇: 记录Java有意思的代码 持续更新~
下一篇: 【Soul源码阅读】1.初识 Soul
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值