代码之家  ›  专栏  ›  技术社区  ›  Stefan Sveidqvist

你最大的索引改进是什么?

  •  0
  • Stefan Sveidqvist  · 技术社区  · 15 年前

    几年前,当优化运行缓慢的数据库表时,我得到了一个启示。原始查询在具有大数据字段的表中大约需要20分钟。在最终意识到没有人费心为表建立索引之后,我首先为几个键建立了一个索引。瞧,查询只需0.15秒!

    在为表添加索引时,您最大的改进是什么?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Walter Mitty    15 年前

    这与非常古老的DBMS产品有关,与Oracle类似,但与Oracle本身无关。这个产品使得创建一个没有索引的表变得非常容易。Oracle的不同之处在于,如果声明主键,Oracle将自动在主键上创建索引。这个产品没有做到这一点。

    我被叫进来加速一个正在爬行的数据库。有一个名为“CostCenters”的表,其中有900行,没有索引。几年前,那张桌子上有20行。此表上的引用完整性查找需要表扫描。这套系统处于瘫痪状态。

    创建索引需要5分钟。它使事情加速了100倍。我们还做了一些其他的事情,比如整理磁盘碎片,重建一些索引,这些索引已经被过度填充了。在加速之前花了10分钟的任务在加速之后花了2秒钟。

    说了这句话,不要让对速度的关注使你对简单而合理的设计视而不见。您需要简单而合理的表、索引、数据库对象、应用程序代码和查询。很容易加快简单和合理的事情。只为提高速度而设计的东西,要使其简单、合理,要困难得多。

        2
  •  2
  •   David Aldridge    15 年前

    我曾经修改过一个分析函数,在windowing子句中包含一些逻辑上多余的列,允许分区和子分区修剪以及基于索引的访问。

    一小时的查询时间缩短到了0.02秒,比原来快了18万倍。

    http://oraclesponge.wordpress.com/2006/03/15/predicate-pushing-and-analytic-functions/

    我赢了吗?D

        3
  •  1
  •   daef    15 年前

    我有一个非常类似的情况,一个表没有主键集-所以加入这个表(包含5行左右)需要10分钟(是的-另一个表相当大)

    都发生在MSSQL2K上

    设置了一个pk之后,只需要不到十分之一秒的时间…

    所以查询优化器在没有pk的情况下确实会进行检查:)