当前位置: 首页 > 面试题库 >

索引的DO和DONT [关闭]

艾跃
2023-03-14
问题内容

很难说出这里的要求。这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开,
请访问帮助中心。

8年前关闭。

有哪些DO和DONT使用索引来提高数据库性能?

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

当不应该创建索引或其他可能影响性能的索引相关操作时,就不要使用DONT了。


问题答案:

一般来说:

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%的行外具有相同的值,请考虑在该字段上使用部分索引(即不包含该值的位置)。这会导致索引变小得多,而不会影响其实际用途。

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



 类似资料:
  • 我正在使用elasticsearch elasticsearch-rails的官方gems套件,我在试图索引父/子关系时非常困难,我不确定我的问题是在映射、索引或查询还是在所有这些方面!!所以我不会发布我的代码片段。 是否有以下完整的工作示例: 子索引和父索引的映射 子级和父级的索引/更新/删除 在两个索引上查询高级查询;这意味着我需要用'has_child'查询在父索引上搜索,也需要用'has_

  • dont-break Checks if the node module in the current folder breaks unit tests for specified dependent projects. Relevant discussion at npm,Do not break dependant modules. Install npm install -g dont-br

  • 问题内容: 似乎在elasticsearch中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都已建立索引,为什么需要对其进行定义? 问题答案: 不幸的是,使用了“索引”一词,这意味着ES和关系数据库中的一些事物(在编辑中非常不同),因为它们针对不同的用例进行了优化。 数据库中的“索引”是辅助数据结构,它使查询和查询变得快速,并且它们通常存储的值与表中显示的值完全相同。您

  • Symbols * statement ** statement _ __all__ B built-in function help open builtins module C coding style compileall module D docstrings, [1] documentation strings, [1] E environment variable PATH, [1]

  • bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L

  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引