我已经创建了一个表T,其中有一个在列C (btree index)上创建的索引,但是当我运行select查询时,这个索引并没有被使用。
例如:
Explain select * from T where C='xxx'这将按顺序在所有段中搜索,而不考虑我创建的索引。
我使用了以下标志
enable_seqscan = off
enable_bitmapscan = off
enable_indexscan = on我错过了什么吗?请解释一下?
谢谢Ganesh.R
发布于 2011-07-27 22:25:51
无论出于何种原因,查询优化器都可能认为最好不要使用索引。此外,如果统计元数据已过期,则可能需要对表执行ANALYZE。有关更多详细信息,请参见this article (或others like it)。
发布于 2012-11-16 22:11:45
w/o explain analyze很难说清楚原因,但有几点:
enable_seqscan = off不会完全关闭seq扫描。seq扫描非常繁重如果表很小(100 - 10k条记录),则按顺序读取它并忽略所有的索引可能会更快
发布于 2011-11-05 03:39:57
与传统的RDBMS不同,索引可能不是在Greenplum中访问数据的首选方法。
Greenplum是开箱即用的,它优先于表扫描而不是索引扫描,您必须进行大量调整才能改变这一点。您可以设置其他参数来帮助GP优化器选择索引,包括set enable_nestloop on, cpu_index_tuple_cost和其他索引。查看GP Admin guide的附录D,了解完整的可调参数集。
另外,您是如何分发数据的?这在优化器选择处理查询的方式中起着一定的作用。
https://stackoverflow.com/questions/6841306
复制相似问题