我有一个应用程序,它循环数据库表中的大量记录,并对该数据库中的记录执行大量SQL和.Net操作(目前我在PostgreSQL上使用Castle.ActiveRecord).
我在几个字段上添加了一些基本的btree索引,正如您所料,SQL操作的性能大幅提升.想要充分利用dbms的性能,我想做一些关于我应该在所有项目上编制索引的更好的教育选择.
我理解在执行插入时性能有所下降(因为数据库需要更新索引以及数据),但是在创建数据库索引时应该考虑哪些建议和最佳实践?如何最好地为一组数据库索引(经验法则)选择字段/字段组合?
另外,如何最好地选择要用作聚簇索引的索引?当涉及到访问方法时,我应该在什么条件下使用btree而不是哈希或gist或杜松子酒(它们究竟是什么?).
我的一些经验法则:
索引所有主键(我认为大多数RDBMS在创建表时执行此操作).
索引所有外键列.
仅在以下情况下创建更多索引:
查询很慢.
您知道数据量将显着增加.
在表上填充大量数据时运行统计信息.
如果查询速度很慢,请查找执行计划并:
如果查询表只使用很少的列将所有列放入索引,那么您可以帮助RDBMS仅使用索引.
不要浪费资源索引微小的表(数百条记录).
从高基数到较低的顺序索引多列.这意味着,首先是具有更多不同值的列,然后是具有更少不同值的列.
如果查询需要访问超过10%的数据,则通常完全扫描比索引更好.