优化SQL查询

优化SQL查询,sql,performance,query-optimization,Sql,Performance,Query Optimization,我想优化以下查询 Select Distinct(Column_A) from Table_name where Column_B = 'Something' 这基本上是一个完整的表扫描(大约750万条记录)。我想知道我是否可以在此列上添加索引,以便进行完整的索引扫描,或者是否有其他更好的解决方案?您可以在表名(列B,列A)上创建索引。索引“覆盖”了查询,因此只有索引才能访问查询 编辑: 我一直在想这个。即使使用索引,一些SQL引擎也可能对数据进行排序,以解析不同的。以下查询可能更快: sel

我想优化以下查询

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

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

您可以在
表名(列B,列A)
上创建索引。索引“覆盖”了查询,因此只有索引才能访问查询

编辑:

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

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
             );

要使其正常工作,需要在
表名(列A、列B、id)
上建立索引。除索引外,这假定每行上都有一个唯一的
id

您可以在
表名(列B,列a)上创建一个索引。
。索引“覆盖”了查询,因此只有索引才能访问查询

编辑:

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

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
             );

要使其正常工作,需要在
表名(列A、列B、id)
上建立索引。这假设除了索引之外,每行上都有一个唯一的
id

但是除了创建索引之外,还有其他方法吗?您可以按
列按表划分。\B
。或者按物化视图划分。还有一个问题,即列\a大约有730万个空值,所以我想在这里添加索引并没有多大帮助。@user1270123。如果大多数值都是
NULL
,您可以通过执行
来帮助SQL引擎优化查询,其中列_B='Something',列_A不为NULL
,以及
列_B上的索引,列_A
(按该顺序)。但是还有其他方法吗,除了创建索引之外?您可以按
列\B
或物化视图按表进行分区。还有一个问题是,列\A大约有730万个空值,所以我想添加索引在这里没有多大帮助。@user1270123。如果大多数值都是
NULL
,您可以通过执行
来帮助SQL引擎优化查询,其中列_B='Something'和列_A不为NULL
,以及列_B上的索引,列_A(按该顺序)。