mysql为什么添加索引_当我添加新索引时,为什么MySQL中索引的基数保持不变?
如果表中只有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中索引的基数保持不变?相关推荐
- 连接到此计算机的本地打印机无法选择,Windows无法打开以添加打印机_如果无法添加本地打印机怎么办...
在日常办公室中如何添加本地打印机,打印机是必不可少的设备,但是有时将打印机连接到计算机时会遇到很多问题. 连接本地打印机对于我们的工作效率非常重要. 让我们看一下如何添加打印机. 无法将打印机添加到w ...
- 天地图给一个区域添加标题_天地图之添加覆盖物
原文首发于微信公众号:jzman-blog,欢迎关注交流! 接着上一篇继续来学习天地图 Android SDK ,地图开发中除了常见的定位需求,还有就是覆盖物的添加,比如最近的项目是有关风险管控的,在 ...
- mysql datetime 默认值_老大让我整理下公司内部MySQL使用规范,分享给大家
作者:白程序员的自习室 链接:https://www.studytime.xin/article/mysql-internal-specifications.html 最近涉及数据库相关操作较多,公司 ...
- mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...
对于 MySQL 数据库来说,好的逻辑表和物理表的规划至关重要,我们需要根据查询语句来针对性地设计 Schema ,没有万能好用的 Schema.一个 denormalized 的 schema 可以 ...
- mysql 微博 数据表_推荐:新浪微博,腾讯微博 mysql数据库主表设计
用户信息表(t_user_info) 字段名称 字节数 类型 描述 User_id 4 uint32 用户编号(主键) User_name 20 Char[20] 名称 Msg_count 4 uin ...
- camel 数据库_使用Camel在来自不同来源的Solr中索引数据
camel 数据库 Apache Solr是建立在Lucene之上的"流行的,快速的开源企业搜索平台". 为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理系统,关系数据 ...
- mysql 停止服务内存_服务器莫名的内存高占用 导致 MySQL 停止运行问题
这问题是年后开始出现的,服务器内存占用越来越高,一度达到90%,最后 MySQL 都停止运行了.贴吧签到的数据库用户 ID 这一项也丢失了,导致无法签到,断签了好些天,被提醒才发现,要挨打的.幸好设置 ...
- 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 ...
- mysql 运行sql 编码_关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题...
关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题 本人小白一名, 最近碰到了一个问题, 在 navicat 导入 MySQL 文件时, 报出 MySQL 找不到 u ...
最新文章
- (C++)A+B 输入输出练习VII 输入包含若干行,每行输入两个整数a和b,由空格分隔。 对于每组输入,输出a和b的和,每行输出后接一个空行。
- 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法
- lucene.net 应用资料
- sql server创建数据库与相关查询操作
- tornado 第一篇
- Mybatis Generator 配置详解
- 两个有序链表序列的合并_leetcode链表之合并两个排序的链表
- javaEE项目发布方法
- 帮你快速拿Offer!java面向对象程序设计实验报告
- 传输层协议TCP和UDP
- 未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法
- configure: line syntax error near unexpected token `win32-dll'
- jmeter性能测试面试题二【多测师_王sir】
- linux查看iozone安装目录,IOZone的基本使用
- 工业相机——点阵相机与线阵相机
- Excel如何在表格内打勾
- charles 代理设置
- 在线rar压缩包解密软件,忘记rar压缩包密码如何找回?
- 孝感市小学生机器人编程比赛_小学生获机器人大赛一等奖 编程是语文老师教的...
- Oracle启用、禁用触发器