【问题标题】:where to create index on large table?在哪里可以在大表上创建索引?
【发布时间】:2016-07-02 16:35:42
【问题描述】:

我正在使用 Oracle 11g。我有数十万条记录的表。

我的查询:

Select a1,a2,..... n 
from tbl 
where a1=val1 and a2=val2 and a3=val3 and a4=val4 and a5=val5

为了提高在where条件下的查询性能,我必须为哪一列创建索引?

【问题讨论】:

  • 也可能需要标准化。为什么您的表格水平使用 5 个不同的列?这有什么意义,即使是 2NF 形式?这是事实表吗?
  • @clifton 其实这是一个面试问题
  • 其实解决问题的方法有很多,也有很多隐藏的bug和秘密。最佳答案“视情况而定”。您可以在每一列上创建单独的索引,或者作为点@scaisEdge“在列(a1、a2、a3、a4、a5)上”您还可以创建分区、重构表等。你告诉我们这是一个面试问题,那么你应该提供尽可能多的变体。

标签: oracle performance query-optimization


【解决方案1】:

当您在 where .. 中涉及的所有列上创建和索引时获得最佳性能,并且可能还在 select 中涉及的列上,因此索引 .. 也用于每次检索值 ..

在你的情况下,列..

 (a1, a2, a3, a4, a5) 

为了过滤器性能..并且可能在其他列上避免访问数据表以获取信息

你可以在这里得到一些提示https://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_in.htm

https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html

请记住,调整与 DB 产品相关..

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2018-01-18
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2021-10-13
    相关资源
    最近更新 更多