当前位置:  开发笔记 > 数据库 > 正文

创建数据库索引有哪些最佳实践和"经验法则"?

如何解决《创建数据库索引有哪些最佳实践和"经验法则"?》经验,为你挑选了1个好方法。

我有一个应用程序,它循环数据库表中的大量记录,并对该数据库中的记录执行大量SQL和.Net操作(目前我在PostgreSQL上使用Castle.ActiveRecord).

我在几个字段上添加了一些基本的btree索引,正如您所料,SQL操作的性能大幅提升.想要充分利用dbms的性能,我想做一些关于我应该在所有项目上编制索引的更好的教育选择.

我理解在执行插入时性能有所下降(因为数据库需要更新索引以及数据),但是在创建数据库索引时应该考虑哪些建议和最佳实践?如何最好地为一组数据库索引(经验法则)选择字段/字段组合?

另外,如何最好地选择要用作聚簇索引的索引?当涉及到访问方法时,我应该在什么条件下使用btree而不是哈希或gist或杜松子酒(它们究竟是什么?).



1> FerranB..:

我的一些经验法则:

索引所有主键(我认为大多数RDBMS在创建表时执行此操作).

索引所有外键列.

仅在以下情况下创建更多索引:

查询很慢.

您知道数据量将显着增加.

在表上填充大量数据时运行统计信息.

如果查询速度很慢,请查找执行计划并:

如果查询表只使用很少的列将所有列放入索引,那么您可以帮助RDBMS仅使用索引.

不要浪费资源索引微小的表(数百条记录).

从高基数到较低的顺序索引多列.这意味着,首先是具有更多不同值的列,然后是具有更少不同值的列.

如果查询需要访问超过10%的数据,则通常完全扫描比索引更好.


这个答案是一个好的开始,但在某些方面有点简单.索引所有外键并不总是正确的,因为有时数据总是从fk遍历到父级.如果从未查询过,那么始终将最高基数放在首位是没用的.还有几件事.阅读[this post](http://stackoverflow.com/questions/3293156/effects-of-clustered-index-on-db-performance/3295528#3295528)可能对某些读者有用.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有