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

时间:2009-03-04 10:18:33

标签: database database-design indexing

几年前,我在优化运行缓慢的数据库表时得到了启示。在包含大型数据字段的表中,原始查询大约需要20分钟。在最终意识到没有人打扰索引表之后,我为几个键构建了一个索引。瞧,查询在0.15秒内完成!

为表格添加索引时,您有哪些最大的改进?

3 个答案:

答案 0 :(得分:2)

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

我被要求加速正在抓取的数据库。有一个名为“CostCenters”的表,其中有900行,没有索引。几年前,那张桌子上有20行。此表上的参照完整性查找需要表扫描。该系统岌岌可危。

创建索引花了五分钟。它把事情加速了100倍。我们做了一些其他的事情,比如对磁盘进行碎片整理,以及重建一些人口过多的索引。加速前10分钟开始的任务在加速后花了两秒钟。

说到这里,不要让对速度的担忧使你对简单而完美的设计视而不见。您需要简单而健全的表,索引,数据库对象,应用程序代码和查询。加速简单而有声的事情很容易。采取仅为速度而设计的东西并使它们变得简单和合理起来要困难得多。

答案 1 :(得分:2)

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

一小时的查询减少到0.02秒,速度提高了180,000倍。

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

我赢了吗? :d

答案 2 :(得分:1)

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

所有在MSSQL2k上发生

设定PK后,它花了不到十分之一秒......

所以当没有PK时,查询优化器真的会出现问题:)