列索引的最佳数据库策略是啥?

Posted

技术标签:

【中文标题】列索引的最佳数据库策略是啥?【英文标题】:what is the best db strategy for column indexing?列索引的最佳数据库策略是什么? 【发布时间】:2009-12-19 16:43:52 【问题描述】:

两个例子是:

    将显示在查询 where 子句中的列(其中 Name = "xtz") 您要在查询中排序(排序)的列

这是正确的吗?还有其他重要的用例吗?

SQL Server 能否根据使用模式推荐要索引的字段?

【问题讨论】:

【参考方案1】:

你会知道你的表现是否不够好。

您提到的事情已经是解决方案的一部分。除了这两个,我还要补充:

在子表中的任何外键列上放置索引

这在执行 JOIN 时非常有帮助,并且它不会由 SQL Server 自动完成(与普遍存在的城市神话相反,SQL Server 从不自动放置任何索引外键)。

是的,从 SQL Server 2008 开始,如果您在 SQL Server Management Studio 的查询中包含实际执行计划,它可以为您提供一些关于哪些索引可能有帮助的提示。

但要小心:这样,您只需调整一个 SQL 查询。您可以将其调优,但性能仍然很差,因为单个查询通常不是全部,调优一个查询以使其执行得非常好可能会对系统的其余部分产生负面影响。

要真正知道要调整什么以及如何调整它,您需要使用 SQL Server 分析器跟踪在很长一段时间内以及系统运行的一天中的不同时间捕获实际的使用数据在使用中,并检查它们。

阅读 SQL Server 分析:

Introducting SQL Server Profiler Six part video series on how to become a SQL Server Profiler Master How to identify slow running queries

马克

【讨论】:

外键上的索引也加快了检查外键约束的速度,例如,如果引用的行被删除。【参考方案2】:

这些是索引的唯一原因。

由于“使用模式”很难量化——而且它会变化——不可能对索引做出一揽子声明。

大量更新(或删除)的索引成本大于收益。

很少使用的索引可能比使用它的少数查询的维护成本最高。

它需要积极的试验来确定索引组合是否最适合您的数据库的当前使用模式。这意味着查看查询执行计划以了解已使用的内容,并查看慢速查询以了解可能缺少的内容。

【讨论】:

【参考方案3】:

排序和查询是设计时几乎所有索引的“必须”。您必须小心您执行集群索引的表的哪些索引,以免引入插入/更新延迟。

除此之外,您会发现是否需要更多索引来跟踪生产中的系统的性能,并检测哪些 sql 命令的执行时间更长。

【讨论】:

【参考方案4】:

如果查询速度很慢,最好的办法是开始添加索引。对于大多数中小型数据库而言,花时间找出要尽早应用的索引并不是一种很好的利用时间。

【讨论】:

【参考方案5】:

应将那些通过最少更新和较少冗余数据更频繁地访问的列设为索引。 如果存储没有问题,那么数据库应该被大量索引。

【讨论】:

【参考方案6】:

您几乎应该总是索引外键(主键会自动索引,但 Fks 不会)。 FK 通常用于连接,因此应该被索引。

【讨论】:

以上是关于列索引的最佳数据库策略是啥?的主要内容,如果未能解决你的问题,请参考以下文章

列索引的有效性是不是与列数据的熵有关

基于列索引的 Spark Dataframe 选择

pandas使用read_csv函数读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用方括号[]基于最外层列索引名称索引列数据

将数组列表作为列附加到具有相同列索引的熊猫数据框中

pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用iloc基于行索引位置列表筛选dataframe数据中指定位置的多个数据行

PostgreSQL 9.4 中 UUID 列索引的填充因子建议