【问题标题】:Most efficient way to SELECT DISTINCT ColA FROM LargeTableWithFewValuesForColA从 LargeTableWithFewValuesForColA 中选择 DISTINCT ColA 的最有效方法
【发布时间】:2020-04-07 20:57:56
【问题描述】:

我有一张大表(数百万行)。

我必须经常获取某些列的 DISTINCT 值。在我的例子中,这些列实际上只有很少的不同值(几个到几十个)

最有效的方法是什么?

【问题讨论】:

    标签: sql sql-server performance


    【解决方案1】:

    在列上添加索引,然后运行:

    select distinct column
    from t;
    

    【讨论】:

    • 这是我的第一个猜测,但性能并没有提高,查询计划正在进行索引扫描,返回的预期行数 = 表中的行数。这让我很困惑......这是预期的吗?但是,在 Azure SQL Server 上对此进行了测试,但尚未在 SQL Server 上进行测试
    • @GregBalajewicz 。 . .我不确定是否有比索引扫描更快的方法。
    【解决方案2】:

    要添加到大型数据库中的 Gordons 答案,除了索引之外,您还可以对数据进行分区。数据的分区就像

      Table_1 (id) 
      Select distinct records from table
      Where id <1000
      Table_2 (id) 
      Select distinct records from table
      Where id >1000
    
     Actual table =table_1+table_2 (id)
    

    只是一个示例来说明这个分区并不是额外的,它实际上是同一个表或数据库,只是它根据唯一列被拆分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多