使用索引提高数据库性能的一些注意事项是什么?
DO是应该创建索引的情况,或者是另一个与索引相关的提示,可以提高性能。
当索引不应该被创建时,或者与索引相关的另一种操作可能会损害性能时,就会出现一个不需要的情况。
发布于 2011-05-23 22:38:24
一般而言:
1.除非确实需要,否则不要添加索引。
每个索引都会使写入速度变慢...
2. where子句将使用索引:
-- index on foo (bar)
select bar from foo where bar = :bar;出于同样的原因,它将用于外键引用(在两个表上)。
-- index on foo (bar) if baz (bar) is frequently updated/deleted.
create table foo (bar references baz (bar)); 3.索引将用于排序,特别是在绑定到限制时:
-- index on foo (bar)
select bar from foo order by bar limit 10;4.当2.和3.都适用时,多列索引有时很有用。
在这种情况下,将where条件放在第一位,排序关键字放在最后:
-- index on foo (baz, bar)
select bar from foo where baz between :baz1 and :baz2 group by bar;5.保持表统计数据最新。
如果表统计数据是垃圾,那么优化器使用您的索引的可能性很小。如果需要,手动清理/分析您的数据库。
6.索引使用情况取决于表的重新分区。
如果检索到的行数超过某个阈值,则执行全表扫描会更快。如果索引所在的布尔值字段或多或少将表一分为二,则永远不会使用它。
同样,如果您的数据以这样一种方式存储,即索引扫描最终可能会随机访问该表的几乎所有可用的磁盘页面,那么规划者将倾向于全表扫描。
7.考虑部分/表达式索引。
如果您有一个字段,除了10%的行之外,其他字段的值都是相同的,请考虑对其进行部分索引(即,不是该值的位置)。这会产生一个小得多的索引,而不会影响它的实际有用性。
如果您经常查询应用于您的列的表达式,并且您的平台提供了表达式索引,请考虑在其上添加索引。使用时,表达式不会为每一行求值。
发布于 2011-05-23 22:30:48
如果性能更好,则将索引留在那里。如果性能较差,则将其删除。
https://stackoverflow.com/questions/6098616
复制相似问题