gpt4 book ai didi

mysql - 复合索引在MySQL中有方向吗?

转载 作者:行者123 更新时间:2023-11-29 05:45:41 25 4
gpt4 key购买 nike

什么时候需要以下内容:

create index i_t_a_b on t(a,b);

create index i_t_b_a on t(b,a);

最佳答案

当您想要最大的检索速度并且在连接或 where 条件中都有两列时,但有时列 a 具有更高的选择性,有时列 b 具有更高的选择性,并且您希望从单个索引中利用这一事实。

此外,我认为您的数据大小/机器性能之比应该相当高,同时您将不得不(猜测)愿意将任何改进称为必要(即使只有几个百分比)。

不过,经验告诉我们,事情取决于很多因素;使用特定的 RDBMS 和应用程序环境,您可以更好地运行自己的基准测试。

编辑:关于复合指标的进一步解释。来自 wikipedia :
“列在索引定义中的顺序很重要。可以仅使用第一个索引列检索一组行标识符。但是,检索(在大多数数据库上)是不可能的或高效的仅使用第二个或更大索引列的行标识符集。
例如,想象一个电话簿首先按城市组织,然后按姓氏,然后按名字。如果给定城市,您可以轻松提取该城市所有电话号码的列表。然而,在这本电话簿中查找给定姓氏的所有电话号码将是非常乏味的。您必须在每个城市的部分中查找具有该姓氏的条目。”

Wikipedia 的解释可能过于简单,但它为您提供了基本概念(作为类比,请记住电话簿通常具有聚集索引,而这不是您的通用数据库索引)。

根据索引的大小、数据结构的大小、可用内存、索引第一列的选择性,使用错误排序的索引比使用表扫描的成本仍然要低得多。

啊,只是想到了一个更好的类比与你正在寻找的例子想象一本不错的教科书,它会有目录,其中包含章节和子章节以及它们所在的页数(这是一个非聚集索引,它包含指向数据记录的指针 - 页)。现在假设教科书是基于 SQL-92 标准的,那么 TOC 中的大部分术语都是 SQL 术语(请保持这个假设)。您还会在书的末尾有另一个索引,它会按字母顺序(假设有主要章节名称)和页码列出所有有趣的术语。

对于诸如此类的问题“告诉我出现 DISTINCT 的所有章节”您将使用第二个索引。(因为后期字段选择性高)

对于诸如此类的问题'告诉我出现在第一章下的术语的数量'你会使用 TOC

所以对于诸如此类的问题“SELECT 是否在 DML 章节中进行了描述?”您可以使用其中任何一个索引。(因为两个领域的选择性都很高)但是,如果 DML 本身的 TOC 有 3 页长,而索引中的 SELECT 条目只有十五行,您可能会转到第二个,这是您从两个索引中获益的一个例子。

现在,如果您认为这太过牵强,请考虑扫描国会图书馆的数据库。 :)

正如我之前所说,所有计划都很好,但最后一定要运行您自己的基准测试。

关于mysql - 复合索引在MySQL中有方向吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com