如果表中只有1行,则索引的基数当然应为1.它只是计算唯一值的数量.

如果您将索引视为基于存储桶的查找表(如散列),则基数是存储桶的数量.

以下是它的工作原理:当您在一组列(a,b,c,d)上构建索引时,数据库将遍历表中的所有行,查看每行的4个列的有序四元组.假设你的表看起来像这样:

a b c d e

-- -- -- -- --

1 1 1 1 200

1 1 1 1 300

1 2 1 1 200

1 3 1 1 200

那么数据库看的只是4列(a,b,c,d):

a b c d

-- -- -- --

1 1 1 1

1 2 1 1

1 3 1 1

看到只剩下3个唯一的行?那些将成为我们的桶,但我们会回到那个.实际上,表中每行还有一个记录id或行标识符.所以我们原来的表看起来像这样:

(row id) a b c d e

-------- -- -- -- -- --

00000001 1 1 1 1 200

00000002 1 1 1 1 300

00000003 1 2 1 1 200

00000004 1 3 1 1 200

因此,当我们只查看(a,b,c,d)的4列时,我们实际上也在查看行ID:

(row id) a b c d

-------- -- -- -- --

00000001 1 1 1 1

00000002 1 1 1 1

00000003 1 2 1 1

00000004 1 3 1 1

但是我们想通过(a,b,c,d)而不是行id进行查找,所以我们生成这样的东西:

(a,b,c,d) (row id)

--------- --------

1,1,1,1 00000001

1,1,1,1 00000002

1,2,1,1 00000003

1,3,1,1 00000004

最后,我们将具有identicle(a,b,c,d)值的行的所有行ID组合在一起:

(a,b,c,d) (row id)

--------- ---------------------

1,1,1,1 00000001 and 00000002

1,2,1,1 00000003

1,3,1,1 00000004

看到了吗? (a,b,c,d)的值(1,1,1,1)(1,2,1,1)和(1,3,1,1)已经成为我们查询表的关键进入原始表的行.

实际上,这些都不会真的发生,但它应该让你对如何完成索引的“天真”(即直接)实现有个好主意.

但最重要的是:基数只测量索引中有多少个唯一行.在我们的示例中,查询表中的键数为3.

希望有所帮助!

mysql为什么添加索引_当我添加新索引时,为什么MySQL中索引的基数保持不变?相关推荐

  1. 连接到此计算机的本地打印机无法选择,Windows无法打开以添加打印机_如果无法添加本地打印机怎么办...

    在日常办公室中如何添加本地打印机,打印机是必不可少的设备,但是有时将打印机连接到计算机时会遇到很多问题. 连接本地打印机对于我们的工作效率非常重要. 让我们看一下如何添加打印机. 无法将打印机添加到w ...

  2. 天地图给一个区域添加标题_天地图之添加覆盖物

    原文首发于微信公众号:jzman-blog,欢迎关注交流! 接着上一篇继续来学习天地图 Android SDK ,地图开发中除了常见的定位需求,还有就是覆盖物的添加,比如最近的项目是有关风险管控的,在 ...

  3. mysql datetime 默认值_老大让我整理下公司内部MySQL使用规范,分享给大家

    作者:白程序员的自习室 链接:https://www.studytime.xin/article/mysql-internal-specifications.html 最近涉及数据库相关操作较多,公司 ...

  4. mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...

    对于 MySQL 数据库来说,好的逻辑表和物理表的规划至关重要,我们需要根据查询语句来针对性地设计 Schema ,没有万能好用的 Schema.一个 denormalized 的 schema 可以 ...

  5. mysql 微博 数据表_推荐:新浪微博,腾讯微博 mysql数据库主表设计

    用户信息表(t_user_info) 字段名称 字节数 类型 描述 User_id 4 uint32 用户编号(主键) User_name 20 Char[20] 名称 Msg_count 4 uin ...

  6. camel 数据库_使用Camel在来自不同来源的Solr中索引数据

    camel 数据库 Apache Solr是建立在Lucene之上的"流行的,快速的开源企业搜索平台". 为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理系统,关系数据 ...

  7. mysql 停止服务内存_服务器莫名的内存高占用 导致 MySQL 停止运行问题

    这问题是年后开始出现的,服务器内存占用越来越高,一度达到90%,最后 MySQL 都停止运行了.贴吧签到的数据库用户 ID 这一项也丢失了,导致无法签到,断签了好些天,被提醒才发现,要挨打的.幸好设置 ...

  8. linux mysql解压完_【Linux】CentOS 7.4 安装 MySQL 8.0.12 解压版

    安装环境/工具 1.Linux(CentOS 7.4版) 2.mysql-8.0.12-el7-x86_64.tar.gz 安装步骤 1.下载mysql解压版(mysql-8.0.12-el7-x86 ...

  9. mysql 运行sql 编码_关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题...

    关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题 本人小白一名, 最近碰到了一个问题, 在 navicat 导入 MySQL 文件时, 报出 MySQL 找不到 u ...

最新文章

  1. (C++)A+B 输入输出练习VII 输入包含若干行,每行输入两个整数a和b,由空格分隔。 对于每组输入,输出a和b的和,每行输出后接一个空行。
  2. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法
  3. lucene.net 应用资料
  4. sql server创建数据库与相关查询操作
  5. tornado 第一篇
  6. Mybatis Generator 配置详解
  7. 两个有序链表序列的合并_leetcode链表之合并两个排序的链表
  8. javaEE项目发布方法
  9. 帮你快速拿Offer!java面向对象程序设计实验报告
  10. 传输层协议TCP和UDP
  11. 未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法
  12. configure: line syntax error near unexpected token `win32-dll'
  13. jmeter性能测试面试题二【多测师_王sir】
  14. linux查看iozone安装目录,IOZone的基本使用
  15. 工业相机——点阵相机与线阵相机
  16. Excel如何在表格内打勾
  17. charles 代理设置
  18. 在线rar压缩包解密软件,忘记rar压缩包密码如何找回?
  19. 孝感市小学生机器人编程比赛_小学生获机器人大赛一等奖 编程是语文老师教的...
  20. Oracle启用、禁用触发器

热门文章

  1. 如何在 ASP.Net Core 使用 内存缓存
  2. 如何在 C# 中使用 Dapper ORM
  3. Blazor 准备好为企业服务了吗?
  4. 五分钟了解dotnetcore配置框架
  5. 向大厂看齐!为自己的程序增加自动转储的功能!
  6. C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
  7. .NET CORE(C#) WPF简单菜单MVVM绑定
  8. 容器日志管理 (2) 开源日志管理方案 ELK/EFK
  9. 2019年9月中国编程语言排行榜,C#排第三
  10. RabbitMQ消息队列应用