首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从根上理解为什么说索引离散型越高越好

昨天那篇文章中,我留了一个问题:“为什么说索引离散型越高越好?”今天我们就一起从根上理解它! 还是那句话,任何问题,要知其然,还要知其所以然。希望通过这篇文章讲解,你能明白两个问题。...第一种 ‘xttblog%’ 是不确定,决定于列离散型,理论上讲可以用到,如果发现离散情况特别差情况下,查询优化器觉得走索引查询性能更差,还不如全表扫描。...假设我们现在有一个状态字段 status,它离散型非常差,那么对它建立索引,对应索引树,举例如下: ?...你看我这个例子,status 字段索引离散型非常差,如果此时搜索 status = 1 数据,根节点判断时候,结果是查询左子树,但是当在左子树第二层再进行判断时候,因为左右分支都满足条件,所以很难抉择选择哪一个分支继续搜索...离散型有一个计算公式:count(distinct col):count(col),离散型越高,选择型越好。 以上,希望能够帮助大家解惑!知识点虽小,但是能讲明白,少之又少!

1.4K30

Kafka分区数是不是越多越好

Kafkaproducer和consumer都可以多线程地并行操作,而每个线程处理是一个分区数据。因此分区实际上是调优Kafka并行度最小单元。...分区优点 kafka使用分区将topic消息打散到多个分区分布保存在不同broker上,实现了producer和consumer消息处理高吞吐量。...Kafkaproducer和consumer都可以多线程地并行操作,而每个线程处理是一个分区数据。因此分区实际上是调优Kafka并行度最小单元。...所以说,如果一个topic分区越多,理论上整个集群所能达到吞吐量就越大。 分区不是越多越好 分区是否越多越好呢?...主题 0, 1, 2, 3 分区以及 T2主题 0, 1, 2, 3分区 C2-0 将消费 T1主题 4, 5, 6 分区以及 T2主题 4, 5, 6分区 C2-1 将消费 T1主题 7,

3.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

mysql为什么选错索引?怎么解决?

在进行慢SQL分析时候,有时候我们会发现explain扫描行数和慢日志中行数相差很大,那explain中rows这个扫描行数是怎么判断?...这个统计信息就是索引“区分度”,显然,一个索引上不同值越多,这个索引区分度就越好。而一个索引上不同个数,我们称之为“基数”(cardinality)。...也就是说,这个基数越高,索引区分度越好。 日常中我们可以通过”show index from tablename”看到一个索引基数。 MySQL怎样得到索引基数?...采样统计时候,InnoDB默认会选择N个数据页,统计这些页面上不同值,得到一个平均值,然后乘以这个索引页面数,就得到了这个索引基数。 而数据表是会持续更新,索引统计信息也不会固定不变。...设置为off时候,表示统计信息只存储在内存中。这时,默认N是8,M是16. 由于是采样统计,所以不管N是20还是8,这个基数都是很不准确

47210

Redis HyperLogLog命令操作实例

比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 基数为3 优点:即使输入元素数量或者体积非常非常大,计算基数所需空间总是固定12 KB 内存...这和计算基数时,元素越多耗费内存就越多集合形成鲜明对比。 缺点:只会根据输入元素来计算基数,并且会有少许误差。...将Redis当做使用LRU算法缓存来使用 大量插入数据 分区(Partitioning):如何将你数据分布在多个Redis里面 分区是将数据拆分为多个Redis实例过程,因此每个实例只包含一部分...缺点:操作更加复杂 分区类型 Redis中有两种类型分区。假设有四个Redis实例:R0,R1,R2,R3以许多代表用户,如user:1,user:2,…等等。...哈希分区 在这种类型分区中,使用散列函数(例如,模函数)将转换成数字,然后将数据存储在不同Redis实例中。

65630

MySQL索引优化:如何提高查询效率和性能

一、了解索引作用和原理 1、索引是一种特殊数据结构,通过将数据排序并存储额外索引表,以加快查询速度。 2、索引通过创建树状结构来快速定位数据,常用索引类型包括B树索引和哈希索引。...3、使用索引可以减少数据库需要扫描数据量,降低查询时间复杂度。 二、选择合适列创建索引 1、首先,根据查询频率和重要性选择需要索引列。...高频率查询列和经常用于连接列通常是索引最佳选择。 2、根据列基数(不同值数量)选择索引,基数越大,索引选择性越好,提高查询效率。...3、避免创建过长复合索引,因为索引长度越长,维护成本越高,选择列顺序也会影响查询速度。...四、避免索引冗余和重复 1、避免在相同列上创建重复索引,这样会增加索引表大小,并且对更新操作造成额外开销。 2、注意删除不再使用索引,以减少磁盘空间占用和提高更新操作效率。

76930

MySQL执行计划(explain)分析

用途:查看查询方法 TABLE列: 输出数据行所在名称 由ID为M,N查询union产生结果集 或由ID为N查询产生结果 用途:查看数据来源 PARTITIONS列 对于分区表,显示查询分区...ID 对于非分区表,显示为NULL 用途:用于检查出低效率分区扫描 TYPE列 system:这是const联接类型一个特例,当查询表只有一行时使用 const:表中有且只有一个匹配行时使用,...如对主键或是唯一索引查询,效率最高联接方式 eqref: 唯一索引或主键查找,对于每个索引,表中只有一条记录与之匹配 ref:非唯一索引查找,返回匹配某个单独值所有行。...列 表示返回结果行数占需读取行数百分比 FILTERED列值越大越好 依赖于统计信息 - 执行计划限制 无法展示存储过程,触发器,UDF对查询影响 无法使用EXPLAIN对存储过程进行分析 早期版本...COUNT(*) AS audit_rate, COUNT(DISTINCT product_id)/COUNT(*) AS product_rate FROM product_comment; 区分度越高越好

93640

这个 MySQL 索引选择性有点意思!

2.什么是索引选择性 关于索引选择性(Index Selectivity),它是指不重复索引值(也称为基数 cardinality)和数据表记录总数比值,取值范围在 [0,1] 之间。...索引选择性越高则查询效率越高,因为选择性高索引可以让 MySQL 在查找时过滤掉更多行。 那有小伙伴要问了,是不是选择性越高索引越好呢?当然不是!...这个时候虽然性能最好,但是也是最费空间,这不符合我们创建前缀索引初衷。...我们一开始之所以要创建前缀索引而不是唯一索引,就是希望能够在索引性能和空间之间找到一个平衡,我们希望能够选择足够长前缀以保证较高选择性,但是又希望索引不要太过于占用存储空间。...那么我们该如何选择一个合适索引选择性呢?索引前缀应该足够长,以便前缀索引选择性接近于索引整个列,即前缀基数应该接近于完整列基数

1.3K30

排序算法 - 使用JavaScript实现快速排序 详解

基本思想 从数组中取出一个数,称之为基数(pivot) 遍历数组,将比基数数字放到它右边,比基数数字放到它左边 遍历完成后,数组被分成了左右两个区域 将左右两个区域视为两个数组,重复前两个步骤...= j){ // 交换到右分区,使得左边分区都小于或等于基数,右边分区大于或等于基数 swap(arr, i, j) j-- } } // 如果两个指针相等...){ // 找到第一个大于基数位置 while (i < j && arr[i] <= pivot) i++ // 找到第一个小于基数位置 while (i = pivot) j-- // 交换到右分区,使得左边分区都小于或等于基数,右边分区大于或等于基数 swap(arr, i, j) } // 如果两个指针相等...,我们可以发现,在随机化越高情况下,快速排序所用轮次会越少,所以一般我们可以通过打乱数组后进行排序,效率更高 var swap = (arr, i, j) => { let temp = arr

85810

期刊影响因子越高越难发吗?

p=30444期刊影响因子越高越难发吗?期刊影响因子代表了期刊近两年论文引用数据,影响因子越高说明这本期刊收录论文被引次数高,进一步说明了这本期刊学术影响力就高。...很多想发SCI期刊科研学者不具备发表能力和水平,首先英文这块就需要好好润色,所以小编建议大家想要发表SCI期刊的话可以咨询我们线上老师协助你发表,并不是分值越高越好,也要根据自己评审要求以及个人能力来发表...一般影响因子高分区就高,影响因子低就是低分区。...1、中科院SCI分区  中科院SCI分区是按期刊三年平均影响因子来划分:  一区:前5%  二区:6%~20%  三区:21%~50%  四区:后50% 2、JCR分区  JCR分区是把某一个学科所有期刊都按照上一年影响因子降序排列...,然后平均等分(各25%):  Q1:前25%  Q2:25%~50%  Q3:50%~75%  Q4:75%~100%  以上内容就是关于期刊影响因子越高越难发吗介绍,另外还介绍了SCI分区是如何划分

88110

Oracle-index索引解读

接下来我们就分析针对这个表两个查询:一个查询使用id(经过排序字段),另一个查询使用firstName(未经排序字段)。...另外,由于二分查找原因,数据基数性(cardinality)或唯一性也非常重要。对基数性为2字段建立索引,会将数据一分为二,而对基数性为1000字段,则同样会返回大约1000条记录。...在这么低基数性下,索引效率将减低至线性查找水平,而查询优化器会在基数性小于记录数30%时放弃索引,实际上等于索引纯粹只会浪费空间。...创建新索引时收集统计信息 7)NOCOMPRESS | COMPRESS:是否使用“压缩”(使用压缩可以删除一个列中出现重复值) 8)NOSORT | REVERSE:NOSORT表示与表中相同顺序创建索引...为 NORMAL;而位图索引index_type类型值为BITMAP 索引分类 B-树索引(默认类型) 位图索引 HASH索引 索引编排表 反转索引 基于函数索引 分区索引 本地和全局索引

86140

一次 MySQL 千万级大表优化过程

索引设计 索引并不是越多越好,要根据查询有针对性创建,考虑在WHERE和ORDER BY命令上涉及列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描。...值分布很稀少字段不适合建索引,例如"性别"这种只有两三个值字段。 字符字段只建前缀索引。 字符字段最好不要做主键。 不用外,由程序保证约束。 尽量不用UNIQUE,由程序保证约束。...长度小列,索引字段越小越好,因为数据库存储单位是页,一页中能存下数据越多越好。 离散度大(不同值多)列,放在联合索引前面。...查看离散度,通过统计不同列值来实现,count越大,离散程度越高。 SQL编写 使用limit对查询结果记录进行限定。 避免select *,将需要查找字段列出来。...如果分区字段中有主键或者唯一索引列,那么所有主键列和唯一索引列都必须包含进来。 分区表无法使用外约束。 NULL值会使分区过滤无效。 所有分区必须使用相同存储引擎。

1.7K30

MySQL优化

,order by,on从句中出现列 (2)where条件中,>=,between,in,以及like 字符串+通配符(%)出现列 (3)长度小列,索引字段越小越好,因为数据库存储单位是页...,一页中能存下数据越多越好 (4)离散度大(不同值多)列,放在联合索引前面。...: mysql> SHOW STATUS LIKE 'handler_read%'; handler_read_key:这个值越高越好越高表示使用索引查询到次数。...;     -all:全表扫描; possible_keys:可能用到索引; key:实际使用索引; key_len:索引长度,越短越好; ref:索引哪一列被使用了,常数较好; rows...; 五、定位慢查询 MySQL慢查询 六、分区 MySQL分区和分表 七、配置优化 MySQL配置优化

63320

快速排序

步骤如下 从数列中挑出一个元素,称为基准(pivot) 分区(partition):遍历数列,比基数元素放在左边,比他大放在右边 于是此次分区结束后,该基准就处于数列中间位置,其左边数全比它小...针对具体基数选择方式和区别方式不同,主要有四种方式: 普通快排 随机快排 双路快排 三路快排 思考: 1.渐进有序数组和一般乱序数组,对快排有什么效率区别 对于快排,就类似于通过分治从顶到底渐进有序...,选择基数使得分正左右两个子序列长度接近(分区平衡),快排效率越高.反之使得分区不平衡,快排效率会降低....2.分区时等于数怎么办?...原因:快排中分治不平衡性 我们知道,归并排序复杂度O(nlogn)中logn原因是每次归并都是高度平衡,即左右两支长度相等。平衡度越好,性能越接近logn。

77220

SQL优化几点建议

二、几条原则 对经常搜索、排序、分组列建索引 不重复值,基数越大,效果越好 索引数据类型尽可能短 最左前缀原则 不要建立过多索引 大量insert考虑批量插入 like不要在初始位置使用通配符...table: 查询是哪个表 partitions: 匹配分区 type: join 类型 possible_keys: 此次查询中可能选用索引 key: 此次查询中确切使用到索引...4.2 索引列越少越好 有些不懂sql优化,干脆把所有的where条件都加上索引,不但增加了索引数量,还会出现很多大复合索引。...4.6 为分区表选择正确索引类型 五、索引应用认识误区 5.1 只有走索引才是最优 要看具体场景 5.2 索引有益无害 索引是把 双刃剑,在提升检索性能同时,以牺牲数据写性能和增加系统负载为代价...5.6 位图索引很小且很快 当位图索引列基数较高是,位图索引就会变得很庞大。

63540

ClickHouse学习-建表和索引优化点(一)

那些有相同分区表达式值数据片段才会合并。这意味着 你不应该用太精细分区方案(超过一千个分区)。否则,会因为文件系统中文件数量过多和需要打开文件描述符过多,导致 SELECT 查询效率不佳。...还有就是一般我们都是使用是日期作为分区,同一分区内有序,不同分区不能保证有序。...下图也就是他排序规则(稀疏索引) 不同分区数据会被分成不同片段,ClickHouse 在后台合并数据片段以便更高效存储。不同分区数据片段不会进行合并。...by指定,一般在查询条件中经常被用来充当筛选条件属性被纳入进来 可以是单一维度,也可以是组合维度索引,通常需要满足高级列在前、查询频率大在前原则; 基数特别大不适合做索引列(可以对比上图索引创建规则...总结 建表优化,创建字段时候尽量不要使用nullable 日期尽量都使用date类型 索引存储规则 创建索引尽量选择基数,也就是重复相对较多(因为是稀疏索引)在mysql中正好是相反他需要创建索引时候基数相对较大

3.2K20

公司只缴纳 5% 公积金,真的会节约成本吗?

大家好,我是爱吃瓜了不起。 这几天了不起依旧是在日常摸鱼时候,打开了某脉。结果竟然在某脉上刷到了某脉公司自己热搜。有员工爆料某脉公积金缴纳比例突然降低到 5%,并取消了早中晚餐和相关补助。...还有其他公司程序员趁机嘲讽自家公司一直都是按照 5% 比例缴纳。 但是有人也表示,公积金比例下调不动了,但是公积金基数可以继续下调呀。 缴纳公积金越高越好吗?...而公司缴纳公积金和个人缴纳公积金比例一致,所以缴纳比例越高,公司付出成本也越高,但是员工获得实惠也就越多。同时,扣除公积金部分还不用缴税,简直是美滋滋。...了不起在这里简单计算一下。 张三是一名北京程序员,月薪 2w。那么公司每个月的人工成本,在给他发放 2w 工资薪水基础上,还要加上缴纳五险一金中公司缴纳部分。...对于月收入低于最高缴纳基数员工来说,某脉降低了 5% 成本,但是员工损失了将近 8% 收入,相当于扣掉了一个月工资。

26810

Oracle索引种类介绍

NonPartitioned 非分区索引 B-tree: Normal 正常型B树 Rever Key 反转型B树 Bitmap 位图索引 索引结构: B-tree: 适合与大量增、删...、改(OLTP); 不能用包含OR操作符查询; 适合高基数列(唯一值多) 典型树状结构; 每个结点都是数据块; 大多都是物理上一层、两层或三层不定,逻辑上三层; 叶子块数据是排序,从左向右递增...; 在分支块和根块中放是索引范围; Bitmap: 适合与决策支持系统; 做UPDATE代价非常高; 非常适合OR操作符查询; 基数比较少时候才能建位图索引; 树型结构: 索引头...基于函数索引 比如经常对某个字段做查询时候是带函数操作,那么此时建一个函数索引就有价值了。 分区索引和全局索引 这2个是用于分区时候。...6.HASH索引 HASH索引可能是访问数据库中数据最快方法,但它也有自身缺点。集群上不同值数目必须在创建HASH集群之前就要知道。需要在创建HASH集群时候指定这个值。

2.5K00

Kylin快速入门系列(4) | Cube构建优化

使用衍生维度(derived dimension)   衍生维度用于在有效维度内将维度表上非主键维度排除掉,并使用维度表主键(其实是事实表上相应)来替代它们。...如果根据业务需求知道这个高基数维度只会与若干个维度(而不是所有维度)同时被查询到,那么就可以通过聚合组对这个高基数维度做一定“隔离”。...我们把这个高基数维度放入一个单独聚合组,再把所有可能会与这个高基数维度一起被查询到其他维度也放进来。...被用作where过滤维度放在前边。 ? 2. 基数维度放在基数维度前边。 ? 五....具体实现方式如下:构建引擎根据Segment估计大小,以及参数“kylin.hbase.region.cut”设置决定Segment在存储引擎中总共需要几个分区来存储,如果存储引擎是HBase,那么分区数量就对应于

83620

eBay是如何进行大数据集元数据发现

这些服务节点使用自定义分区逻辑将不同输入监控信号(日志、指标和事件)推送到Kafka数据总线主题上。...我们还在入口服务上使用自定义Kafka分区器,以确保具有相同哈希值始终位于相同Kafka分区上。不同监控信号内部使用不同哈希值。...这种分组有助于降低下游Kafka消费者需要处理数据量基数,从而有效地减少内存占用总量。...去抖动时间戳是去抖动时段开始时间。如果在去抖动期间发现了一个子文档,这意味着子文档名称空间和名称唯一组合与其父文档拓扑会一起出现。去抖动时间越短,发现唯一属性时间近似就越好。...我们去抖动窗口间隔设置为12小时,在每个去抖动期间,我们拥有约4,000万唯一基数(最多可达6000万)。

1.1K30
领券