# 理解 Java 中 distinct 失效的原因与解决方案
在 Java 中,我们经常会使用 Stream API 来处理集合,其中 `distinct()` 方法可以用于去重操作。然而有时我们会发现即使调用了 `distinct()`,结果依然包含重复元素。这种现象被称为“distinct 失效”。今天,我将指导你了解这一现象的原因,以及如何解决它。
## 流程步骤
为了帮助你理解,我            
                
         
            
            
            
            上一讲我们使用DISTINCT来去掉重复行以提高查询效率,这和小伙伴们平常听到的一条优化建议:尽量少使用DISTINCT相悖。下面我们来看看DISTINCT到底该不该使用。如果不想看处理过程的可以直接跳到红色结论部分。       1.使用DISTINCT去掉重复数据我们重复一下上一讲的例子:SELECT DISTINCT UnitPrice FROM [Sales].[SalesOrderDet            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-08 10:26:09
                            
                                492阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            【唯一】DISTINCT与UNIQUE的“区别” 今天一个朋友在Oracle中偶然发现UNIQUE也可以得到唯一的数据结果,问到DISTINCT与UNIQUE的区别。答案是:他们没有区别! distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2018-01-17 13:53:00
                            
                                466阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            能一次查询用户想要的结果,采用group by解决查询表(大批量的车牌号重复、要把重复的车牌号去掉,同时显示完整信息id、车牌号、型号)[sql] view plaincopyprint?SQL> select a.cid,a            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-06-30 07:42:28
                            
                                143阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            针对distinct不能一次查询用户想要的结果,采用group by解决查询表(大批量的车牌号重复、要把重复的车牌号去掉,同时显示完整信息id、车牌号、型号)SQL> select a.cid,a.cbrand,a.cmodel from aps_car a;         CID CBRAND               CMODEL----------- -------...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-05-31 10:45:34
                            
                                374阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            针对distinct不能一次查询用户想要的结果,采用group by解决查询表(大批量的车牌号重复、要把重复的车牌号去掉,同时显示完整信息id、车牌号、型号)SQL> select a.cid,a.cbrand,a.cmodel from aps_car a;         CID CBRAND               CMODEL----------- -------...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-07 12:03:52
                            
                                1215阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1) 没有查询条件,或者查询条件没有建立索引2) 在查询条件上没有使用引导列3) 查询的数量是大表的大部分,应该是30%以上。4) 索引本身失效5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;6) 对小表查            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-17 19:48:37
                            
                                139阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Oracle distinct的用法2008年07月16日 下午 3:18distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-05-08 14:37:11
                            
                                108阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在这个系列文章中,你将学习如何完成一个简单的搜索引擎,以及当有人想要用关键词的搜索你的博客网页时,如何响应查询。你还将学习网络和互联网是如何工作的,进一步了解如何建立一个你自己的搜索索引。百度、谷歌这些大型搜索引擎虽然很复杂,但是背后的原理和思想是一样的,所以你也可以知道为什么你输入一个关键词,这些搜索引擎就能给你一串页面答案。贯穿整个系列的主要计算机科学新思想是:如何建立复杂的数据结构。你将学习            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-18 10:29:54
                            
                                14阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            原因由于有 null 值,导致无效,使用 nvl解决 select vipaccountno from vip1 where vipaccountno not in( select nvl(vipaccountno ,'x') from b1); 建议使用 minus select vipaccou ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-08-27 11:13:00
                            
                                358阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            # MySQL中的DISTINCT子查询失效解决方法
## 介绍
MySQL是一种常用的关系型数据库管理系统,它提供了丰富的功能和强大的性能。在使用MySQL进行数据查询时,我们有时会遇到DISTINCT子查询失效的问题。本文将介绍DISTINCT子查询失效的原因,并提供解决方案。
## 流程图
```mermaid
flowchart TD
    A(开始)
    B(执行查询)            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-09-28 07:13:28
                            
                                700阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换 例如: 低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO = E.DE            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-03 09:47:00
                            
                                260阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            https://blog.csdn.net/weixin_39534833/article/details/148547110?spm=1001.2014.3001.5502 1.2.1 . 逻辑失效逻辑失效是索引本身并没有真正失效,只是由于写法的问题导致索引用不上,比如对SQL的条件列进行运算,类似select * from t where upper(name)=‘ABC’等,这时在name列            
                
         
            
            
            
            文章目录一、生成测试数据二、distinct示例三、版权声明distinct关键字用于从查询的结果集中筛选出唯一值的记录。我们通过示例            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-22 22:40:12
                            
                                128阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            【功能】统计数据表选中行x列的合计值。 【参数】all表示对所有的值求合计值,distinct只对不同的值求合计值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。 【参数】x,只能为数值型字段 【返回】数字值 【示例】 环境: create table table3(xm            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-02 11:08:00
                            
                                643阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            【功能】统计数据表选中行x列的最大值。 【参数】all表示对所有的值求最大值,distinct只对不同的值求最大值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。 【参数】x,可为数字、字符或日期型字段 【返回】对应x字段类型 注:字符型字段,将忽略空值(NULL) 【示            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-02 11:31:00
                            
                                201阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            【功能】统计数据表选中行x列的方差。 【参数】all表示对所有的值求方差,distinct只对不同的值求方差,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。 【参数】x,只能为数值型字段 【返回】数字值 【示例】 环境: create table table3(xm va            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-02 11:11:00
                            
                                94阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            【功能】统计数据表选中行x列的最大值。 【参数】all表示对所有的值求最大值,distinct只对不同的值求最大值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。 【参数】x,可为数字、字符或日期型字段 【返回】对应x字段类型 【示例】 环境: create table            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-02 11:20:00
                            
                                381阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
             Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-06-30 15:41:46
                            
                                1223阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它,检索出的记录数量少) . 举例: SELECT ENAME FROM EMP WHERE EMPNO = 7935 AND DEPTNO + 0 = 10 /*DEPTNO上的索引将失效*/ AND EMP_T            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-03 10:39:00
                            
                                1165阅读
                            
                                                                                    
                                2评论