我有几个查询,其中大多数是:
select * from Blah where col > 0
和
select * from Blah where date > current_date
由于它们都是一个范围,因此在col和date上使用未聚类的b +树索引会是加快查询速度的一个好主意吗?还是哈希索引?还是没有索引会更好?
在 过滤谓词上 用作 日期范围条件 的列上创建 INDEX 应该很有用,因为它将执行 INDEX RANGE SCAN 。
这是有关如何在Oracle中创建,显示和阅读EXPLAIN
PLAN
的演示。
让我们看一下两种情况的测试用例:
测试#1:无索引
SQL> EXPLAIN PLAN FOR
2 SELECT * FROM emp WHERE hiredate > to_date('01/04/1981','mm/dd/yyyy');
Explained.
SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 518 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 14 | 518 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
1 - filter("HIREDATE">TO_DATE(' 1981-01-04 00:00:00', 'syyyy-mm-dd
hh24:mi:ss'))
14 rows selected.
SQL>
测试#1:带索引
SQL> CREATE INDEX emp_idx ON emp(hiredate);
Index created.
SQL>
SQL> EXPLAIN PLAN FOR
2 SELECT * FROM emp WHERE hiredate > to_date('01/04/1981','mm/dd/yyyy');
Explained.
SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
Plan hash value: 3589413211
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 518 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| EMP | 14 | 518 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | EMP_IDX | 14 | | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
---------------------------------------------------
2 - access("HIREDATE">TO_DATE(' 1981-01-04 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
14 rows selected.
SQL>
因此,在第二个测试用例中,您将看到索引范围扫描。我建议您也对您的环境进行类似的测试。
问题内容: 我有一个名为faq_questions的表,其结构如下: 我试图建立一个给定排序顺序的查询,选择具有最高排序顺序的行。 例子: 好的,假设我为已知的排序顺序(id 4)输入了5,我需要它返回ID为3的行。由于不能保证sort_order是连续的,所以我不能只选择known_sort_order + 1。 谢谢! 问题答案: 似乎太简单了,但是看起来像您所需要的:
我有两个实体AAA和BBB,如下所示 以及BBB实体作为 现在使用spring数据JPA本机查询,我需要一个如下的查询(使用JPARepository) 当执行时,它会给出以下异常 这里的bbb详细信息是键(BBBType)值(子实体)对的映射。如何根据数据jpa本机查询中的BBBType值查询映射的子实体?
问题内容: 有谁知道如何使用Postgres 7.4进行不区分大小写的搜索/查询? 我在考虑RegEx,但不确定如何执行此操作,或者不确定是否有函数/标志或可以添加查询的内容? 我正在使用PHP连接并执行查询。 因此,我正在寻找匹配地址信息的方法。 例子: 有什么想法吗? 问题答案: 使用,例如: 文件资料。 或者,您可以使用或,例如:
我正在开发JSF项目并将Elastic Search与本机JavaApi(不是Jest)一起使用。我在elasticsearch索引映射中为高级全文搜索定义了分析器和nGram过滤器。如何使用java api进行此查询定义?
RDF的结果:ClassA类型: 在Protege:x1,x2,x3,x4在Eclipse through Jena:x1,x2,x3,x4,x5,x6,x7,x8,X9... 在本体编辑器中,它工作得很好。然而,在Java中,当我执行查询时,我也得到了不属于该类的个体,但它们通过属性与类个体之一相连。有人知道怎么解决吗?本体论是正确的。 null 门生:
问题内容: 我有一个查询,在我认为可能不使用索引的情况下,出于好奇,我将其重现: 创建一个具有1.000.000行(在中有10个不同的值,在中有500个字节的数据)的。 创建一个索引并收集表统计信息: 尝试获取和的不同值: 不使用索引,前提是提示不会更改。 我想在这种情况下不能使用索引,但是为什么呢? 问题答案: 我运行了Peter的原始内容并复制了他的结果。然后我应用了dcp的建议… 之所以如此