你需要知道的MySQL索引

【任何电机可使用的七段式s曲线-----包括matlab代码和simulink仿真】 S形加加速(T1)→>匀加速(T2)→减加速(T3)→>匀速(T4 )>加减速(T5)>匀减速(T6)-→>减减速(T7) 阅读详情

什么是索引

索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。这里需要记住一点:索引是一种数据结构。
在RDBMS系统中,数据的索引都是硬盘级索引。

索引的类型

既然索引是一种数据结构,那不同的数据结构有着不同的特性,可以为不同的场景提供更好的性能。

哈希索引

哈希索引(hash index)是基于哈希表的实现,只有在能够精确匹配索引所有列的的查询才有效。对于每一行数据,存储引擎都会先计算一个hash code(哈希码),哈希索引将所有的hash code存储在索引中,同时在哈希表中保存指向每个数据行的指针。在进行哈希查找时,根据关键字,使用相同的函数h计算哈希地址h(k),然后直接寻址相应的Hash bucket,直接到对应的链表中取出数据。因此,Hash 查找算法的数据结构由Hash Bucket数组,映射函数f和数据链表组成,通常将Bucket数组和数据链表称作Hash Table,如图,Hash Table由5个buckets和7个数据结点组成:
在这里插入图片描述
哈希查找的时间复杂度是O(n/m),n是指数据结点的数量,m是bucket的数量,在理想情况下,Hash Bucket足够多,Hash函数不产生重复的Hash Value,哈希查找的时间复杂度最优到达O(1),但是,在实际应用中,哈希函数有一定的几率出现重复的哈希地址,产生哈希冲突,时间复杂度会低于O(n/m);在最差的情况下,时间复杂度是O(n)。
在MySQL中,只有Memory引擎显式的支持hash索引,同时也是Memory的默认索引类型,同时Memory也支持非唯一哈希索引,如果存在多个列的hash code 相同,索引会以链表的方式存放多个记录指针到同一个哈希条目中,聪明的你也许就想到了HashMap的数据结构了。
因为哈希索引自身只需要存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快。然而,哈希索引也有它的限制:

  • 哈希索引只包含哈希值和指针,而不存储数据,所以不能通过使用索引中的值来规避回表操作
  • 哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序
  • 哈希索引无法支持部分索引列匹配查找,因为哈希索引始终是使用索引列进行哈希计算获取到哈希值。例如:如果在(A,B)上建立哈希索引,如果只查询列A,则无法使用这个哈希索引。
  • 哈希索引只支持等值查询,包括 = ,in , <=> 。不支持任何范围查询。
  • 访问哈希索引的速度非常快,但是如果存在多个数据同样的hash code,则会严重影响哈希索引查找数据的速度。
  • 哈希索引中的哈希冲突严重的话,也严重影响哈希索引的维护,增,删,改。

B+Tree索引

在了解B+Tree索引之前,先了解对B+Tree索引的演进过程

二叉查找树

二叉查找树是二分查找的思想的体现,二叉查找树的一个特点事左子树的所有的节点均小于父节点,而右子树上的所有节点均大于父节点。因此,这是一个有序的链表:
在这里插入图片描述
从这个数据结构可以看出,二叉树嫩能够实现快速的查找和插入。但是同时二叉树会严重依赖于插入数据的顺序,如果插入的顺序是有序的,比如是1、2、3、4、5。则会退化成单向链表,时间复杂度为O(n)了。这种树也称为斜树,左右树深相差太多了,因此这时候就需要对这一点进行改进,演变出了平衡二叉树(Balanced binary search trees)或AVL树。

在这里插入图片描述

平衡二叉树(AVL树)

先看对平衡二叉树的定义:左右子树的相差度不会超过1。也就是说当左右子树的树高深度不会相差超过1,当超过的时候会发生左旋和右旋,自动维护树的平衡。
在这里插入图片描述
这是按照1、2、3、4、5、6的顺序插入的数据,会自动通过左旋和右旋保证树的平衡,使每个左右树的高度不会超过1。
如果平衡二叉树作为索引,它应该怎么存储数据:

  • 索引列的值,比如我们在id上建立索引,则这个节点上需要存储id的值。
  • 数据行的磁盘地址,通过索引能够查找到数据存放的位置
  • 因为是二叉树,则每个节点会存储左右节点的引用,如果没有,则存null。
    在这里插入图片描述
    比如这是一张有6条数据的表,当我们查询索引列为37的数据,需要先查询出26条数据,然后判断37大于26,走右路,然后再获取到52,走左路,才能找到37,这里一共发生了3次磁盘IO,一次IO耗时大概在10ms左右,数据量多的话将耗费大量的时间。

多路平衡查找树(B-Tree)

在引入多路平衡查找树之前,先知道为什么。在平衡二叉树的结构中,每一个树高都需要一次IO去读取,在这里,我们就需要减少树高来减少IO次数。
Balanced Tree 这个就是我们的多路平衡查找树,叫做 B Tree(B 代表平衡)。跟 AVL 树一样,B 树在枝节点和叶子节点存储键值、数据地址、节点引用。它有一个特点:分叉数(路数)永远比关键字数多 1。比如我们画的这棵树,每个节 点存储两个关键字,那么就会有三个指针指向三个子节点。
在这里插入图片描述
B Tree 的查找规则是什么样的呢?比如我们要在这张表里面查找 99。因为 99大于 35,走右边。因为 99 大于 87,走右边。在磁盘块 12中99,只用了 3 次 IO。
InnoDB在默认的情况下一次是按页存储和加载的,按页为单位进行读取加载的,页的大小是16kb,从而通过使用多路平衡树达到减少IO的目的。
B+树(加强版多路平衡查找树)
B Tree 的效率已经很高了,为什么 MySQL 还要对 B Tree 进行改良,最终使用了 B+Tree 呢?总体上来说,这个 B 树的改良版本解决的问题比 B Tree 更全面。我们来看一下 InnoDB 里面的 B+树的存储结构:
在这里插入图片描述

B+Tree的特点

它的关键字的数量是跟路数相等的;
B+Tree 的根节点和枝节点中都不会存储数据,只有叶子节点才存储数据。搜索 到关键字不会直接返回,会到最后一层的叶子节点。比如我们搜索 id=28,虽然在第一 层直接命中了,但是全部的数据在叶子节点上面,所以我还要继续往下搜索,一直到叶 子节点。
举个例子:假设一条记录是 1K,一个叶子节点(一页)可以存储 16 条记录。非叶 子节点可以存储多少个指针?
假设索引字段是 bigint 类型,长度为 8 字节。指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节。非叶子节点(一页)可以存储 16384 / 14 = 1170 个这样的 单元(键值+指针),代表有 1170 个指针。
树深度为 2 的时候, 有 1170^2 个叶子节点 ,可以存储的数据为
1170 * 1170 * 16 = 21902400。
在查找数据时一次页的查找代表一次 IO,也就是说,一张 2000 万左右的表,查询数据最多需要访问 3 次磁盘。所以在 InnoDB 中 B+ 树深度一般为 1-3 层,它就能满足千万级的数据存储。

  • B+Tree 的每个叶子节点增加了一个指向相邻叶子节点的指针,它的最后一个数 据会指向下一个叶子节点的第一个数据,形成了一个有序链表的结构。
  • 它是根据左闭右开的区间 [ )来检索数据。

索引的优缺点

索引可以让服务器快速定位到表的指定位置,这不是索引的唯一有点。

  • 索引大大减少了服务器需要扫描的数据量
  • 索引可以帮助服务器避免排序和临时表
  • 索引可以将随机I/O变为顺序I/O

索引在查询上带来很大的性能提升,则在写上会带来额外的性能损耗

  • 创建索引和维护索引需要耗费时间,这种时间是随着数据量的增加而增加
  • 索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占用一定的物理空间
  • 当对表中的数据进行增加、删除和修改的时候,索引也需要动态的维护,这就降低了数据的维护速度。

如何用好索引

既然索引存在这么多的好处,是否只要在相应的字段上创建相应的字段就可以了。答案是并没有那么简单,只有理解了索引的原理和特点,才能更好的发挥索引的优势。

独立的列

CREATE TABLE `test_2` (
  `id` int NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;

创建一张如上语句的表,对该表使用如下语句进行查询:

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

在这里,并没有使用到索引,对我们来说id + 1 = 3 很容易就转成了id=2来进行查询,但是MySQL却无法做到,这里需要养成一个习惯,无论是运算还是函数计算,都需要放到符号的右侧,否则无法使用到索引。

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

前缀索引

有时候,可能要对一列会存储很长字符串的列进行添加索引,这种情况下会让索引变的大而且很难维护。这种情况下可能就需要使用到前缀索引。一方面能够节省索引空间,另一方面能够提高索引的效率,这里需要通过对该列的计算来得到最佳的列前缀的长度,既能节省空间,也能保证较好的可选择性。
在表中写入如下测试数据

mysql> select * from test_2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | wangyi       |
|  2 | zhoue        |
|  3 | zfsafadsds   |
|  4 | zfsafadsds   |
|  5 | zhangsan     |
|  6 | zhangli      |
|  7 | zhanghong    |
|  8 | zhangfdsafas |
|  9 | zhangfsafhs  |
| 10 | zhangflllll  |
+----+--------------+
10 rows in set (0.00 sec)

先查看最排前的数据,这里数据量比较少,仅做演示作用。

mysql> select count(*) as cnt ,name from test_2 group by name order by cnt  desc limit 10;
+-----+--------------+
| cnt | name         |
+-----+--------------+
|   2 | zfsafadsds   |
|   1 | wangyi       |
|   1 | zhoue        |
|   1 | zhangsan     |
|   1 | zhangli      |
|   1 | zhanghong    |
|   1 | zhangfdsafas |
|   1 | zhangfsafhs  |
|   1 | zhangflllll  |
+-----+--------------+
9 rows in set (0.00 sec)

我们可以发现全表查询的情况下,区分度还是很高,数据分布较均匀,现在我们先看看从三个列前缀看看情况如何:

mysql> select count(*) as cnt ,left(name,3) as pref  from test_2 group by pref order by cnt  desc limit 10;
+-----+------+
| cnt | pref |
+-----+------+
|   6 | zha  |
|   2 | zfs  |
|   1 | wan  |
|   1 | zho  |
+-----+------+
4 rows in set (0.00 sec)

情况并不好,数据都集中在 zha 前缀上。下面我们来统计不同前缀的区分度:

mysql> select count(distinct left(name,3))/count(*) as pref3,  
    -> count(distinct left(name,4))/count(*) as pref4,
    -> count(distinct left(name,5))/count(*) as pref5,
    -> count(distinct left(name,6))/count(*) as pref6,
    -> count(distinct left(name,7))/count(*) as pref7,
    -> count(distinct left(name,8))/count(*) as pref8        
    -> from test_2;
+--------+--------+--------+--------+--------+--------+
| pref3  | pref4  | pref5  | pref6  | pref7  | pref8  |
+--------+--------+--------+--------+--------+--------+
| 0.4000 | 0.4000 | 0.4000 | 0.7000 | 0.9000 | 0.9000 |
+--------+--------+--------+--------+--------+--------+
1 row in set (0.00 sec)

你会发现当索引长度选择为7的时候,已经能达到很好的区分度,因此可以建立前缀长度为7的前缀索引就能够达到不错的效果

mysql> alter table test_2 add key (name(7));
mysql> show index from test_2\G;
*************************** 1. row ***************************
        Table: test_2
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL
*************************** 2. row ***************************
        Table: test_2
   Non_unique: 1
     Key_name: name
 Seq_in_index: 1
  Column_name: name
    Collation: A
  Cardinality: 9
     Sub_part: 7
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL
2 rows in set (0.00 sec)

多列索引

很多人在创建多列索引的时候,可能会有两个常见的错误:
为每个列建立一个单独的索引
按照错误的顺序建立多列索引
使用不同的写法有不同的表现:

mysql> explain select * from test_2 where id=1 or name='zfsafadsds'\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test_2
   partitions: NULL
         type: index_merge
possible_keys: PRIMARY,name
          key: name,PRIMARY
      key_len: 30,4
          ref: NULL
         rows: 3
     filtered: 100.00
        Extra: Using sort_union(name,PRIMARY); Using where
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from test_2 where id=3 and name='zfsafadsds'\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test_2
   partitions: NULL
         type: const
possible_keys: PRIMARY,name
          key: PRIMARY
      key_len: 4
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from test_2 where id=1 union select * from test_2 where name='zfsafadsds'\G;
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: test_2
   partitions: NULL
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
*************************** 2. row ***************************
           id: 2
  select_type: UNION
        table: test_2
   partitions: NULL
         type: ref
possible_keys: name
          key: name
      key_len: 30
          ref: const
         rows: 2
     filtered: 100.00
        Extra: Using where
*************************** 3. row ***************************
           id: NULL
  select_type: UNION RESULT
        table: <union1,2>
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
     filtered: NULL
        Extra: Using temporary
3 rows in set, 1 warning (0.00 sec)

从上面的执行结果可以看出:

  • 当出现对多个索引做交互操作时(通常有多个AND条件),通常意味着需要建立一个包含所有列的多列索引;
  • 当出现对多个索引做联合操作时(通常是多个OR条件),通常需要耗费大量的CPU和内存资源在算法的缓存、排序和合并上,不然UNION的效果来的好。
如何正确的选择索引的顺序
  • 能够通过调整顺序能减少索引的维护,推荐调整顺序
  • 索引的顺序会影响索引列的排序,先按照第一列进行排序,再按照第二列… ,可以满足order by 、distinct和group by的要求。
  • 如果没有排序要求,则按照数据的区分度来调整顺序

三星索引

对查询的列进行了索引 谓之 一颗星
使用索引避免了排序 谓之 两颗星
使用索引避免了回表 谓之 三颗星
在这里插入图片描述

参考资料

In-Memory:哈希索引
MySQL相关(三)- 索引数据模型推演及 B+Tree 的详细介绍
《高性能MySQL》

如何计算 R 中的基尼系数(附示例) 以意大利统计学家Corrado Gini命名,基尼系数是衡量人口收入分配的一种方法。基尼系数的值在 0 到 1 之间,值越高代表收入不平等越大,其中:0代表完全的收入平等(每个人的收入都一样) 1代表完全的收入不平等(一个人拥有所有收入) 您可以在此处找到按国家/地区列出的基尼系数列表。以下示例显示了使用DescTools包中的Gini()函数计算 R 中的基尼系数的两种方法。示例 1:使用个人收入计算基尼系数假设我们有以下 10 个人的年收入列表:收入:5 万美元、5 万美元、7 万美元、7 万美元、7 阅读详情

相关推荐

Zemax光机热集成分析:从FEA数据导入到光学性能评估实战

在精密光学系统设计中,环境温度变化和机械应力是导致像质恶化的关键因素,这涉及到光、机、热多物理场的耦合分析。其核心原理在于,通过有限元分析(FEA)软件(如ANSYS)模拟热与力学载荷下的结构变形和温度分布,并将这些物理场数据精准映射到光学设计软件(如Zemax)中,以评估其对调制传递函数(MTF)、点列图等核心光学指标的影响。这项技术的工程价值在于,它使设计从静态的理想模型跃升至动态的工程现实,能够在设计阶段就预测并补偿环境扰动,从而显著提升光学系统在航空航天、车载镜头、高功率激光等严苛工况下的可靠性与稳

weixin_30565327的博客 356

MySQL 哈希索引

哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值计算出来的哈希码也不同。哈希索引将所有哈希码存放在索引中,同时在哈希表存放指向数据行的指针。 在哈希索引中,采用桶(bucket)来表示一条或多条记录的存储单元。令K表示搜索码的集合,B表示所有桶地址的集合。哈希函数h是一个从K中的找出B中的一个

SegmentFault 1065

【腹腔镜数据集】Cholec80+CholecSeg8k2020+Endoscapes2024

计算机辅助手术的发展旨在提高手术的正确性和安全性。然而,研究人员和工程师却面临着开发和训练更好算法所需的注释数据有限的问题。因此,同步定位与建图(SLAM)等基础算法的发展受到限制。基于Cholec80数据集,从Cholec80中的17个视频片段中提取了8,080个腹腔镜胆囊切除术图像帧,对图像进行注释并向公众发布。该数据集名为 CholecSeg8K。这些图像中的每一个都以十三个类别的像素级注释,这些类别通常在腹腔镜胆囊切除术中发现。

Toky_min的博客 2022

mysql索引需要了解的几个注意

mysql索引需要了解的几个注意 板子之前做过2年web开发培训(入门?),获得挺多学生好评,这是蛮有成就感的一件事,准备花点时间根据当时的一些备课内容整理出一系列文章出来,希望能给更多人带来帮助,这是系列文章的第一篇 注:科普文章一篇,大牛绕道 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。 表越大

wccmfc123的专栏 775

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

5分钟上手,Cursor + IntelliJ IDEA 双端开发:高效协同的终极方案

最好的工具,是让你忘记工具的存在。通过AI 的创造力(Cursor)IDE 的工程力(IDEA)无缝的上下文流转(插件协同)从此,不再手忙脚乱切窗口,不再迷失在文件树中。只需一个快捷键,专注编码本身。装上这两个插件后,日常开发体验虽然没有天翻地覆的变化, 但至少摸鱼的几个小时时间是有的!

weixin_44058951的博客 2201

Mysql索引

什么是索引 提高数据查询效率的数据结构 where 条件 与 order by时会用到 索引的分类 从存储结构上来划分: BTree索引(B-Tree或B+Tree索引) Hash索引 full-index全文索引 R-Tree索引 从应用层次来分 普通索引 -- 一个索引只包含单个列,一个表可以有多个单列索引 唯一索引 -- 索引列的值必须唯一,但允许有空值 复合索引 -- 即一个...

github_28583061的博客 181

主成分分析(Principal Component Analysis,PCA)

主成分分析1.主成分分析1.1 降维(Dimensionality Reduction)1.2 均值(Mean)1.3 方差(Variance)1.4 协方差(Covariance)1.5 协方差矩阵(Covariance Matrix)1.6 线性变换(Linear Transformation)1.7 主成分分析(PCA)1.8 PCA和SVD的关系 1.主成分分析 关于PCA的介绍:用最直观的方式告诉你:什么是主成分分析PCA 笔记来源:Principal Component Analysis (PC

一个搬运知识的笨小孩 3232

MySQL索引怎么用?究竟能有多快?看完这篇你就懂了!

本文介绍的是MySQL索引的具体使用,原理以及本质结构请看我写的上一篇文章:MySQL索引凭什么能让查询效率提高这么多?原理是什么? 相信看完上一篇,你对索引的原理有了最基础的了解了,那么下面我们就去看一下怎么才能使用索引优化数据查询吧。 为了能让索引能有更直观的效率,我在一张表里扔进了百万条数据(光造这些数据,生成数据代码写了一个小时,解决MySQL8的文件导入权限问题解决了两个小时,导入数据花费了一个小时,我太难了~(;д;)。但是,一切不以实践数据为标准的理论都是**耍!流!氓!**o(´^`)o.

jcSongle的博客 4446

Python爬虫实战:逆向解析腾讯视频API,高效获取结构化视频信息

首先,我们定义期望获取的数据结构,这有助于数据验证和代码清晰度。python"""腾讯视频信息数据模型"""title: str = Field(..., description="视频标题")vid: str = Field(..., description="视频唯一ID")play_count: Optional[int] = Field(None, description="播放量")

2201_76125261的博客 2380

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 792

MySQL索引详解

一、什么是索引?   索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。 二、索引的作用?   索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度) 三、优点: 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。 可以加快数据的检索速度 可以加速表与表之间的连接 在使用分组和排序进行...

【设计改变世界】github地址:https://github.com/guochunyang2004 266

DDS协议--[第一章][概述]

Data Distribute Service,数据分发服务:数据分发服务(DDS™)是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。DDS集成系统中的各个组件,提供低延迟数据连接、高可靠性以及高可扩展体系结构,以适应商业级物联网(IoT)应用程序的需求。

qq_41816308的博客 1153

MySQL 索引你必须知道的那些事

索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制。

LEE180501的博客 1400

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【MySQL】成为MySQL高手必须要知道的MySQL索引

上一篇了解到了MySQL安装步骤,接下来就开始学习MySQL索引知识点。

小冷coding的博客 2369

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

在MySQL中当有多个索引时 你知道MySQL是如何选择索引的吗 ???

MySQL 中一张表可以支持多个索引,在 SQL 语句也并不主动指定使用的索引,具体使用哪个索引是由 MySQL 自己来选择的。

代码小疯子 7825

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

小东呱呱 394

知道mysql的索引吗?

1普通索引:最基本的索引,没有任何限制  唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。  主键索引:它 是一种特殊的唯一索引,不允许有空值。   全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。  组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时应该将最常用(频率)作限制条件的列放在最左边,依

java成神之路 516

mysql怎么知道索引是否生效_如何知道mysql中sql语句索引是否生效

原标题:如何知道mysql中sql语句索引是否生效explain命令详解用explain 来执行检验sql 例如explain select * from a+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+| id | select_type | t...

weixin_39980917的博客 590

面试之mysql的索引你知道什么

单纯的记录一下,这两天春招,基本上只要问这个问题,我都是这么回答的,毕竟几乎每场我都遇到了这个问题,秋招继续使用。有些地方并没有深入,如果后面继续深入了解了,再来改改。 索引本身是什么:存储key的用于查找的数据结构,可以帮助我们更快的定位数据记录。 聚簇索引和非聚簇索引:首先,我们按照mysql的存储引擎来谈的话,可以牵扯出聚簇索引和非聚簇索引。在InnoDB上主键索引使用的时聚簇索引,而在MyISAM上主键索引使用的是非聚簇索引。 不管是InnoDB还是MyISAM,在底层,我们一般使用B+树来存储索

nay_nix2的博客 285

mysql建立高效索引,如何知道你建立的MySQL索引是高效,合理的

不管是开发人员,仍是数据库维护人员,给表建立索引是很常见的事情。普通到什么程度,初级,中级开发人员的印象中,只要写的sql语句效率不高,第一反应就是建索引,而无论这个字段是否适合建立索引。反正只要给字段建立好索引,应用就能跑的嗖嗖的,索引就是银弹,就是灵丹妙药。mysql案例在某个项目现场的数据库中,开发人员给一张业务表的全部字段都建立上了索引。因而就问,为何建立这么索引。开发说,我不懂sql怎么...

weixin_39794340的博客 172

mysql 索引需要知道的知识点总结

mysql 索引 一、MySQL中索引的语法 在创建表的时候添加索引 CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 在创建表以后添加索引 ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name); 或者 CREATE IN

Mr_Susy的博客 180

关于MySql索引,你需要知道!!!

本文摘要: MySQL索引实战总结:1.聚集索引规则:InnoDB必有且仅有一个聚集索引,优先主键,次选非空唯一键,最后隐藏row_id。2.索引创建原则:散列度低的字段(如性别)不宜建索引,联合索引遵循最左匹配原则。3.覆盖索引与回表:查询字段包含在索引中可避免回表,提升性能。4.索引失效场景:包括使用函数、类型隐式转换、左模糊查询、负向查询等。5.优化建议:在WHERE、JOIN、ORDER BY字段建索引,避免冗余,推荐自增ID而非随机值作主键。索引创建需平衡查询性能与维护成本。

weixin_73670121的博客 327

MySQL中的索引(如果想知道MYSQL中有关索引的知识,那么只看这一篇就足够了!)

MySQL中的索引(如果想知道MYSQL中有关索引的知识,那么只看这一篇就足够了!)

秋刀鱼不做梦的编程日常 5410

【MySQL索引】MySQL索引分类,90%的开发都不知道

转载:https://cloud.tencent.com/developer/article/1603199 目录 一、根据底层数据结构划分 1. hash索引 2. B+树索引 二、根据索引字段个数划分 三、根据是否是在主键上建立的索引进行划分 1. 主键索引 2. 辅助索引 四、根据数据与索引的存储关联性划分 1. 聚簇索引 2. 非聚簇索引 五、其他分类 1. 唯一索引 2. 全文索引 六、总结 MySQL的索引分类问题一直让人头疼,几乎所有的资料都会给你列一个长长的.

corleone_4ever的博客 579

关于MySQL组合索引你必须要知道的知识点

组合索引,是在按一定顺序的多个字段上创建的索引。多个字段的排序不同,索引的使用不同。即 index_name (a, b)和 index_name2 (b, a)是不同的索引。组合唯一索引也遵循组合索引的使用规则掌握了以上知识点,在建MySQL表时,可以根据所建表的实际查询场景对表的索引进行优化;也可以在进行查询操作时合理利用索引,从而更有效的返回结果。另外,在建组合索引时经常会犯一个错误:重复创建索引。具体的是对组合索引的第一个字段再单独创建索引。...

追光的鲲的博客 2975
上一篇: 看完这个,你就知道Docker是什么了
下一篇: Janusgraph索引
周庄
博客等级 码龄10年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值