【发布时间】:2017-10-05 08:54:55
【问题描述】:
我想提高一个简单查询的性能,典型的结构如下:
SELECT title,datetime
FROM LICENSE_MOVIES
WHERE client='Alex'
你可以在不同的网站上看到,比如this,你应该做一个这样的索引:
CREATE INDEX INDEX_LICENSE_MOVIES
ON LICENSE_MOVIES(client);
但是查询中有任何性能,就像“忽略”索引一样。 我尝试使用this webpage says 之类的提示。 查询结果如下:
SELECT /*+ INDEX(LICENSE_MOVIES INDEX_LICENSE_MOVIES) */ title, datetime
FROM LICENSE_MOVIES
WHERE client='Alex'
这个语法有什么错误吗?为什么我不能欣赏任何改进?
【问题讨论】:
-
你检查过执行计划看它是否在使用索引吗? 可能忽略它是有效的。表有多大,索引的选择性如何,您使用的是哪个版本的 Oracle,您是否尝试过收集统计信息以确保优化器拥有认为索引有用(如果确实如此)所需的所有信息?
-
你好 Alex,这是 oracle v11。它看起来像使用 Index,一个 INDEX RANGE SCAN ,但它获取与 TABLE ACCESS BY INDEX ROWID 相同的原始数据,但不确定它是否正确......表不大,200K 字节
-
查看执行计划以获取 --+ 规则提示,如果它会显示索引使用情况,则可以。现在,特别是如果创建新表并且有几行 Oracle 会创建优化计划,例如它可以显示 EP 中的表全扫描。
-
是的,它显示了索引的使用情况,但没有从中受益..
标签: sql oracle performance indexing subquery