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

MongoDB在索引列上选择count(distinct x) - 计算大型数据集的唯一结果

相关·内容

SQL 性能调优

(21) 避免索引列上使用NOT 通常 (22) 避免索引列上使用计算 (23) 用>=替代> (24) 用UNION替换OR (适用于索引列) (25) 用IN来替换OR  (26) 避免索引列上使用...在这单表查询统计情况下,如果要过滤条件没有涉及到要计算字段,那它们结果是一样,只是where可以使用rushmore技术,而having就不能,速度上后者要慢如果要涉及到计算字 段,就表示计算之前...,这个字段值是不确定,根据上篇写工作流程,where作用时间是计算之前就完成,而having就是计算后才起作 用,所以在这种情况下,两者结果会不同。...另一个使用索引好处是,它提供了主键(primary key)唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 大型表中使用索引特别有效....如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一索引建立A列和B列上, 并且表中存在一条记录A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,

3.2K10

数据库系统:第三章 关系数据库标准语言SQL

建立索引 CREATE [UNIQUE] [CLUSTER] INDEX ON ([][,[] ]…); 用指定要建索引基本表名字 索引可以建立该表一列或多列上...选择表中若干元组 消除取值重复SELECT子句中使用DISTINCT短语,DISTINCT短语作用范围是所有目标列 //DISTINCT同时作用于Grande和Cno,查询选修课程各种成绩...使用聚集函数 计数 COUNT([DISTINCT|ALL] *) COUNT([DISTINCT|ALL] ) 计算总和 SUM([DISTINCT|ALL] ) 计算平均值...AVG([DISTINCT|ALL] ) 求最大值 MAX([DISTINCT|ALL] ) 求最小值 MIN([DISTINCT|ALL] ) DISTINCT短语:计算时要取消指定列中重复值...,DISTINCT避免重复计算学生人数 SELECT COUNT(DISTINCT Sno) FROM SC; //计算选修编号为L12001课程学生平均成绩、最高分数和最低分数。

2.6K10

数据库查询优化

当使用UNION时,它相当于结果上执行SELECT DISTINCT。换句话说,UNION将联合两个相类似的记录,然后搜索重复记录并排除。如果这是你目的,那么使用UNION是正确。...这是因为DISTINCT子句先获取结果然后去重,这样增加SQLServer有用资源使用。当然,如果你需要去做,那就只有去做了。...与表一样,视图可以有一个索引(clustered index)和多个非索引。创建视图索引后能够提高视图性能。 如果视图不包含索引,则数据库中不保存视图返回结果。...有的时候,我们可能要创建涉及大量记录或必须进行复杂计算视图,比如要进行聚合分组处理或多重连接操作。如果每次引用这些视图时候让sql server重新生成结果数据库开销将非常大。...只要有可能,就应该选择一个数据最整齐、最紧凑数据列(如整数类型数据列)来创建索引。允许有重复列存在。 * 复合索引:如果在两上以上列上创建索引,则称为复合索引

4.3K20

MySQL索引优化实战

索引从物理上可以分为:聚集索引,非聚集索引 从逻辑上可以分为:普通索引唯一索引,主键索引,联合索引,全文索引 索引优化策略 不要在索引列上进行运算或使用函数 列上进行运算或使用函数会使索引失效,从而进行全表扫描...这时候索引作用只是用于优化WHERE条件查找 如果在a b列上建立联合索引,该如何建立,才能使查询效率最高 select count(distinct a) / count(*), count(distinct...MySQL中,有两种方式生成有序结果: 通过有序索引顺序扫描直接返回有序数据 Filesort排序,对返回数据进行排序 因为索引结构是B+树,索引数据是按照一定顺序进行排列,所以排序查询中如果能利用索引...一般区分度80%以上时候就可以建立索引,区分度可以使用 count(distinct(列名))/count(*) 来计算 明确知道只会返回一条记录,可以加limit1 当查询确定只有一条记录时,可以加...因此我们选择足够长前缀保证较高区分度,同时又不能太长(以便节约空间) 可以进行如下实验 select count(distinct left(email, 5)) / count(*) as col5

1.1K30

面试必备,MySQL索引优化实战总结,涵盖了几乎所

索引从物理上可以分为:聚集索引,非聚集索引 从逻辑上可以分为:普通索引唯一索引,主键索引,联合索引,全文索引 索引优化策略 不要在索引列上进行运算或使用函数 列上进行运算或使用函数会使索引失效,从而进行全表扫描...这时候索引作用只是用于优化WHERE条件查找 如果在a b列上建立联合索引,该如何建立,才能使查询效率最高 select count(distinct a) / count(*), count(distinct...MySQL中,有两种方式生成有序结果: 通过有序索引顺序扫描直接返回有序数据 Filesort排序,对返回数据进行排序 因为索引结构是B+树,索引数据是按照一定顺序进行排列,所以排序查询中如果能利用索引...一般区分度80%以上时候就可以建立索引,区分度可以使用 count(distinct(列名))/count(*) 来计算 明确知道只会返回一条记录,可以加limit1 当查询确定只有一条记录时,...因此我们选择足够长前缀保证较高区分度,同时又不能太长(以便节约空间) 可以进行如下实验 select count(distinct left(email, 5)) / count(*) as col5

36110

Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)

如果聚合未在分布列上分组,并且不是预定义特殊情况之一,则 Citus 会退回到这种方法。它会导致网络开销,并且如果要聚合数据太大,可能会耗尽 coordinator 资源。...例如,按非分布列分组 sum(x) 可以使用分布式执行,而 sum(distinct x) 必须将整个输入记录拉到 coordinator。...如果 count(distinct) 聚合在分布列上,Citus 可以直接将查询下推给 worker。...在这一步之后,count(distinct) 聚合会自动切换到使用 HLL,而无需对您查询进行任何更改。您应该能够任何列上运行近似 count distinct 查询。...它评估几个可能 join 顺序并创建一个 join 计划,该计划需要通过网络传输最少数据。 共置连接 当两个表共置时,它们可以它们公共分布列上有效地 join。

3.2K20

MySQL执行计划(explain)分析

用途:查看查询方法 TABLE列: 输出数据行所在名称 由ID为M,N查询union产生结果 或由ID为N查询产生结果 用途:查看数据来源 PARTITIONS列 对于分区表,显示查询分区...如对主键或是唯一索引查询,效率最高联接方式 eqref: 唯一索引或主键查找,对于每个索引键,表中只有一条记录与之匹配 ref:非唯一索引查找,返回匹配某个单独值所有行。...distinct操作,找到第一匹配元祖后即停止找同样值动作 not exists:使用Not Exists来优化查询 using filesort:使用额外操作进行排序,通常会出现在order by...列 表示索引字段最大可能长度 长度由字段定义计算而来,并非数据实际长度 REF列 表示哪些列或常量被用于查找索引列上值 ROWS列 表示MySQL通过索引统计信息,估算所需读取行数 ROWS值大小是个统计抽样结果...计算方法 SELECT COUNT(DISTINCT audit_status)/COUNT(*) AS audit_rate, COUNT(DISTINCT product_id)/COUNT(*)

92940

SQL 性能调优

在这单表查询统计情况下,如果要过滤条件没有涉及到要计算字段,那它们结果是一样,只是where可以使用rushmore技术,而having就不能,速度上后者要慢如果要涉及到计算字 段,就表示计算之前...,这个字段值是不确定,根据上篇写工作流程,where作用时间是计算之前就完成,而having就是计算后才起作 用,所以在这种情况下,两者结果会不同。...另一个使用索引好处是,它提供了主键(primary key)唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 大型表中使用索引特别有效....(22) 避免索引列上使用计算 WHERE子句中,如果索引列是函数一部分.优化器将不使用索引而使用全表扫描....如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一索引建立A列和B列上, 并且表中存在一条记录A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,

2.7K60

MySQL专题- 数据索引使用场景&注意事项

,那么可能用到索引范围查找,如果索引范围查找成本太高, 数据库可能会选择全表扫描方式 。...3.索引尽量是高选择 而且要留意基数值,基数值指的是一个列中不同值个数,显然, 最大基数意味着该列中每个值都是唯一,最小基数意味着该列中所有值都是相同索引基数相对于表行数较高时,...4.使用更短索引 可以考虑前缀索引,但应确保选择前缀长度可以保证大部分值是唯一。 如:alter table test add key(col(6)) 衡量不同前缀索引唯一值比例。...6.如果是唯一值得列,创建唯一索引会更佳,也可以确保不会出现重复数据. 7.使用覆盖索引能大大提高性能 覆盖索引:所有数据都可以从索引中得到,而不需要去读物理记录。...例如某个复合索引idx_a_b_c 建立表tb1 a、b、c 列上, 那么对于如下sql 语句 select a,b from tb1 where a = ? and b = ?

78320

浅谈索引优缺点和建立索引原则

索引优点 索引缺点 建索引几大原则 索引优点 通过创建唯一索引,可以保证数据库表中每一行数据唯一性。 可以大大加快数据检索速度,这也是创建索引最主要原因。...count(distinct col)/count(*),表示字段不重复比例,比例越大我们扫描记录数越少,唯一区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗...7.like 模糊查询中,右模糊查询(321%)会使用索引,而%321 和%321%会放弃索引而使用全局扫描 应该建立索引情况 经常需要搜索列上,可以加快搜索速度; 作为主键列上,强制该列唯一性和组织表中数据排列结构...; 经常用在连接列上,这些列主要是一些外键,可以加快连接速度; 经常需要根据范围进行搜索列上创建索引,因为索引已经排序,其指定范围是连续经常需要排序列上创建索引,因为索引已经排序,...这是因为,由于这些列取值很少,例如人事表性别列,查询结果中,结果数据行占了表中数据很大比例,即需要在表中搜索数据比例很大。增加索引,并不能明显加快检索速度。

3K10

java面试(3)SQL优化

临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中某个数据时。但是,对于一次性事件, 最好使用导出表。...对小型数据使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是必须引用几个表才能获得所需数据时。结果集中包括“合计”例程通常要比使用游标执行速度快。...另一个使用索引好处是,它提供了主键(primary key)唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 大型表中使用索引特别有效....FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO); sql语句用大写;因为oracle总是先解析sql语句,把小写字母转换成大写再执行 避免索引列上使用计算...不要给类似“性别”列创建索引(即整个列值只有一两种,十几种) ,像这种情况列,一般不会走索引,即便在列上创建了索引,因为这种情况全表扫描还要快于利用索引,优化器会选择选择走全表扫描,比如一个列只有四种值

3.2K20

Oracle查询性能优化

同样联结多个表时使用索引也可以提高效率. 2) 另一个使用索引好处是,它提供了主键(primary key)唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列....通常, 大型表中使用索引特别有效. 当然,你也会发现, 扫描小表时,使用索引同样能提高效率. 代价: 虽然使用索引能得到查询效率提高,但是我们也必须注意到它代价....使用索引需要注意地方: 1、避免索引列上使用NOT , 我们要避免索引列上使用NOT, NOT会产生在和在索引列上使用函数相同影响....当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描. 2、避免索引列上使用计算. WHERE子句中,如果索引列是函数一部分.优化器将不使用索引而使用全表扫描....如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一索引建立A列和B列上, 并且表中存在一条记录A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,

2.2K20

MongoDB系列6:MongoDB索引介绍

1、前言 和关系型数据库一样,MongoDB索引可以提高查询执行效率。索引就好比书中目录,可以快速定位书中某一页。适当索引查询,优化器可以快速地返回结果。...2.2 复合索引 MongoDB支持列上创建索引。...它们为每一个插入文档每个索引字段中包含一个唯一索引词。 ·构建全文索引与构建一个大型多键索引非常相似,而且相同数据下,比构建一个简单有序索引要长。...·当在现有集合上构建一个大型全文索引时,确保打开文件描述符有足够高限制。 ·全文索引会影响插入效率,因为MongoDB必须为每一个新源文档每一个唯一索引词添加索引。...基于分片使用哈希索引字段作为片键分片集群分区数据分片集合中,使用哈希索引作为片键结果得到更加随机分布数据。 2) 哈希函数 哈希索引使用哈希函数来计算索引字段哈希。

2.9K101

MySQL面试题 硬核47问

截取得多了,达不到节省索引存储空间目的;截取得少了,重复内容太多,字段散列度(选择性)会降低。怎么计算不同长度选择性呢?...先看一下字段全部数据选择度:select count(distinct address) / count(*) from shop;通过不同长度去计算,与全表选择性对比:公式:count(distinct...left(列名, 索引长度))/count(*)例如:select count(distinct left(address,10)) / count(*) as sub10, -- 截取前10个字符选择度...count(distinct left(address,15)) / count(*) as sub11, -- 截取前15个字符选择count(distinct left(address,20...它们有一个字符,并根据字符排序规则对值进行排序和比较。35、组合索引是什么?为什么需要注意组合索引顺序?组合索引,用户可以多个列上建立索引,这种索引叫做组合索引

1.3K40

SQL 性能优化 总结

,就表示计算之前,这个字段值是不确定,根据上篇写工作流程,where作用时间是计算之前就完成,而 having 就是计算后才起作用,所以在这种情况下,两者结果会不同...通常,大型表中使用索引特别有效. 当然,你也会发现,扫描小表时,使用索引同样能提高效率....(21)避免索引列上使用NOT通常, 我们要避免索引列上使用 NOT, NOT会产生在和在索引列上使用函数相同影响.当 ORACLE”遇到”NOT,就会停止使用索引转而执行全表扫描. (22)避免索引列上使用计算...如果至少有一个列不为空,则记录存在于索引中.举例:如果唯一索引建立A 列和B 列上,并且表中存在一条记录A,B 值为(123,null) , ORACLE将不接受下一条具有相同 A,B 值(123...WHERE DEPT_CODE>=0; (27)总是使用索引第一个列: 如果索引是建立多个列上,只有第一个列(leadingcolumn)被where子句引用时,优化器才会选择使用该索引.这也是一条简单而重要规则

1.8K20

oracle数据库sql语句优化(循环语句有几种语句)

如果要涉及到计算字段,就表示计算之前,这个字段值是不确定,where作用 时间是计算之前就完成,而having就是计算后才起作用,所以在这种情况下,两者 结果会不同。...另一个使用索引好处是,它提供了主键(primary key)唯一性验证。那些LONG或LONG RAW 数据类型, 你可以索引几乎所有的列。通常在大型表中使用索引特别有效。...23、避免索引列上使用计算: WHERE子句中,如果索引列是函数一部分,优化器将不使用索引而使用全表扫描。...如果唯一索引建立A列和B列上, 并且表中存在一条记录A,B值为(123,null), ORACLE将不接受下一条具有相同A,B值(123,null)记录(插入)。...WHERE DEPT_CODE >=0; 26、总是使用索引第一个列: 如果索引是建立多个列上,只有第一个列(leading column)被where子句引用时, 优化器才会选择使用该索引

2.8K10
领券