![]() |
1
5
我运行了彼得的原始资料并复制了他的结果。然后我应用了DCP的建议…
之所以如此,是因为空值不包含在普通的B树索引中,但是group by必须将空值作为分组“value”包含在查询中。通过告诉优化器
顺便说一句,这显然是一个10g或11g数据库,因为它使用了哈希分组算法,而不是旧的排序(分组)算法。 |
![]() |
2
13
更新: 尝试使col列不为空。这就是它不使用索引的原因。当它不是空的时候,这是计划。
如果优化器确定不使用索引更有效(可能是因为重写了查询),那么它就不会使用索引。优化器提示就是这样的,即提示Oracle一个索引 喜欢 使用它。你可以把它们当作建议。但是如果优化器确定最好不要使用索引(例如,由于查询重写的结果),那么它就不会这样做。 请参阅此链接: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm “仅当访问路径基于索引或集群的存在以及SQL语句的语法结构可用时,指定这些提示之一会导致优化器选择指定的访问路径。如果提示指定了不可用的访问路径,那么优化器将忽略它。” 由于您正在运行一个count(*)操作,优化器已经确定只扫描整个表和哈希而不是使用索引更有效。 下面是另一个关于提示的方便链接: http://www.dba-oracle.com/t_hint_ignored.htm |
![]() |
3
10
你忘了这些非常重要的信息: COL不是空的 如果列可以为空,则不能使用索引,因为可能存在未索引的行。
|
![]() |
4
0
位图索引也可以 Execution Plan ---------------------------------------------------------- Plan hash value: 2200191467 --------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 10 | 30 | 15983 (2)| 00:03:12 | | 1 | HASH GROUP BY | | 10 | 30 | 15983 (2)| 00:03:12 | | 2 | TABLE ACCESS FULL| TEST_TABLE | 1013K| 2968K| 15825 (1)| 00:03:10 | --------------------------------------------------------------------------------- SQL> create bitmap index test_index on test_table(col); Index created. SQL> EXEC dbms_stats.gather_table_stats( 'MY_SCHEMA', 'TEST_TABLE' ); PL/SQL procedure successfully completed. SQL> SELECT col, COUNT(*) 2 FROM test_table 3 GROUP BY col 4 / Execution Plan ---------------------------------------------------------- Plan hash value: 238193838 --------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 10 | 30 | 286 (0)| 00:00:04 | | 1 | SORT GROUP BY NOSORT | | 10 | 30 | 286 (0)| 00:00:04 | | 2 | BITMAP CONVERSION COUNT| | 1010K| 2961K| 286 (0)| 00:00:04 | | 3 | BITMAP INDEX FULL SCAN| TEST_INDEX | | | | | --------------------------------------------------------------------------------------- |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |