首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引的DOs和DOs

索引的DOs和DOs
EN

Stack Overflow用户
提问于 2011-05-23 22:29:20
回答 2查看 5.6K关注 0票数 13

使用索引提高数据库性能的一些注意事项是什么?

DO是应该创建索引的情况,或者是另一个与索引相关的提示,可以提高性能。

当索引不应该被创建时,或者与索引相关的另一种操作可能会损害性能时,就会出现一个不需要的情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-23 22:38:24

一般而言:

1.除非确实需要,否则不要添加索引。

每个索引都会使写入速度变慢...

2. where子句将使用索引:

代码语言:javascript
复制
-- index on foo (bar)
select bar from foo where bar = :bar;

出于同样的原因,它将用于外键引用(在两个表上)。

代码语言:javascript
复制
-- index on foo (bar) if baz (bar) is frequently updated/deleted.
create table foo (bar references baz (bar)); 

3.索引将用于排序,特别是在绑定到限制时:

代码语言:javascript
复制
-- index on foo (bar)
select bar from foo order by bar limit 10;

4.当2.和3.都适用时,多列索引有时很有用。

在这种情况下,将where条件放在第一位,排序关键字放在最后:

代码语言:javascript
复制
-- index on foo (baz, bar)
select bar from foo where baz between :baz1 and :baz2 group by bar;

5.保持表统计数据最新。

如果表统计数据是垃圾,那么优化器使用您的索引的可能性很小。如果需要,手动清理/分析您的数据库。

6.索引使用情况取决于表的重新分区。

如果检索到的行数超过某个阈值,则执行全表扫描会更快。如果索引所在的布尔值字段或多或少将表一分为二,则永远不会使用它。

同样,如果您的数据以这样一种方式存储,即索引扫描最终可能会随机访问该表的几乎所有可用的磁盘页面,那么规划者将倾向于全表扫描。

7.考虑部分/表达式索引。

如果您有一个字段,除了10%的行之外,其他字段的值都是相同的,请考虑对其进行部分索引(即,不是该值的位置)。这会产生一个小得多的索引,而不会影响它的实际有用性。

如果您经常查询应用于您的列的表达式,并且您的平台提供了表达式索引,请考虑在其上添加索引。使用时,表达式不会为每一行求值。

票数 32
EN

Stack Overflow用户

发布于 2011-05-23 22:30:48

  1. 将系统吞吐量作为一个整体来衡量。索引可能有助于某些查询,但会损害插入、更新和删除。
  2. 创建索引。
  3. 将系统吞吐量作为一个整体进行测量。

如果性能更好,则将索引留在那里。如果性能较差,则将其删除。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6098616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档