【问题标题】:SQL NOT IN statement Data is not retrieved Using IndexSQL NOT IN 语句 使用索引未检索数据
【发布时间】:2014-01-06 16:04:27
【问题描述】:

我有一个简单的查询:

SELECT * FROM MH.APPOINTMENT WHERE DOCTOR_INC_ID = 1391791151

当我检查执行计划时,我看到数据是使用索引检索的

但是下面的查询:

SELECT * FROM MH.APPOINTMENT WHERE DOCTOR_INC_ID NOT IN (1391791151)

没有从我们的索引中受益。我们使用的是 Oracle 11g Release2。欢迎任何建议。谢谢

【问题讨论】:

  • 您使用的是什么关系型数据库?答案取决于此。
  • Oracle 11g 第 2 版

标签: sql oracle indexing


【解决方案1】:

当您住在美国时,询问“纽约”和“华盛顿”时,您会很容易地识别出位置。因为,它们被索引在你的记忆中。何况,当被问到除了“纽约”之外的所有城市时,你仍然需要从你的记忆中获取所有城市,这显然不像以前那么容易了!!!

也许我听起来很可笑,但这就是索引扫描和全表扫描的概念。

【讨论】:

    【解决方案2】:

    为这种查询使用索引是不值得的——它的选择性不够。 如果查询预期检索一行(或与表大小相比的行数较少,比如说 1%),那么您可以通过首先搜索索引,然后从实际表中返回相关行来非常快速地找到值.但是,如果查询预计会返回 99% 的行,那么在 idex 中搜索它们,然后检索关联的行是没有意义的——这工作量太大了。相反,引擎直接进行表扫描。

    【讨论】:

    • 当您使用位图索引时,它可能看起来不同。但是,它们仅在值选择性时才有用
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2016-11-01
    • 2016-08-13
    相关资源
    最近更新 更多