【问题标题】:OPtimizing the SQL Query优化 SQL 查询
【发布时间】:2014-02-04 19:38:24
【问题描述】:

我想优化下面的查询

Select Distinct(Column_A) from Table_name where Column_B = 'Something'

这基本上是进行全表扫描(大约 750 万条记录)。我想知道我是否可以在这个 column_A 上添加一个索引,以便它可以进行 FULL 索引扫描,或者还有其他更好的解决方案吗?

【问题讨论】:

    标签: sql performance query-optimization


    【解决方案1】:

    您可以在Table_name(Column_B, Column_A) 上创建索引。索引“覆盖”了查询,因此查询只能访问索引。

    编辑:

    我一直在想这个。即使有了索引,一些 SQL 引擎也可能会对数据进行排序以解析distinct。以下查询可能会更快:

    select column_A
    from table_name t
    where column_B = 'Something' and
          t.id = (select min(id)
                  from table_name t2
                  where t2.column_A = t.column_A and t2.column_B = t.column_B
                 );
    

    为此,它需要在table_name(column_A, column_B, id) 上建立索引。这假定除了索引之外的每一行都有一个唯一的id

    【讨论】:

    • 但是除了创建索引还有其他方法吗?
    • 您可以通过Column_B按表分区。
    • 或者物化视图。
    • 还有一个问题,问题是 Column_A 有大约 730 万个 NULL 值,所以我想在这里添加索引没有多大帮助。
    • @user1270123 。 . .如果大多数值是NULL,您可以通过执行where column_B = 'Something' and column_A is not null 以及column_B, column_A 上的索引(按此顺序)来帮助SQL 引擎优化查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2014-11-16
    • 2011-06-22
    • 2015-08-10
    相关资源
    最近更新 更多