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

MySQL中有两个单列索引还是一个两个列索引?

后树
2023-03-14
问题内容

我面临以下问题,我不确定什么是最佳实践。

考虑下表(该表会变大):

id PK | Giver_id FK | FK | 日期

我正在使用InnoDB,据我了解,它会自动为两个外键列创建索引。但是,我还将在需要匹配以下特定组合的情况下进行大量查询:

SELECT...WHERE giver_id = x AND recipient_id = t

每个这样的组合在表中将是唯一的。

在这些列上添加双列索引有什么好处,还是理论上两个单独的索引足够/相同?


问题答案:

如果您有两个单列索引,那么在您的示例中将只使用其中一个。

如果您有一个包含两列的索引,则查询可能会更快(应该进行测量)。两列索引也可以用作单列索引,但仅适用于首先列出的列。

有时在(A,B)上有一个索引,在(B)上有另一个索引可能会很有用。这样可以使使用任一列或两列的查询都更快,但是当然也会使用更多的磁盘空间。

选择索引时,还需要考虑对插入,删除和更新的影响。更多索引=更新速度较慢。



 类似资料:
  • 问题内容: 我正在查看数据库中的一个表(我没有创建该表),我发现有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有负面影响吗? 拿这个例子表: 问题答案: 是的,它可以起作用。 当然,如果使用这两个索引,它们会占用磁盘和内存的额外空间。 但是,它们还会使查询优化器做更多的工作来计算每个SELECT期间每个索引的收益。您拥有的索引越多,需要比较的案例就越多。因此,消除真正的冗余

  • 如何在MySQL中为此查询创建索引?

  • 我的集合中有两个数组(一个是嵌入式文档,另一个只是字符串的简单集合)。文档,例如: 由于一些查询将仅包含策略,而一些查询将包含标签和参与者数组,并且考虑到我无法创建具有两个数组的多键索引这一事实,我认为使用索引交叉点将是一个经典场景。 我正在执行一个查询,但我看不到交叉点。 以下是索引: 以下是查询: 这是解释的结果: 查询中的每个标记(tag1、tag-2和tag-3)都有10K个文档。每个策略

  • 我有两个表,分别是产品和采购: PRODUCTS表-将获得购买的所有新产品。这意味着表prroducts中不存在相同的productname。所有独特产品列表 采购表-具有唯一purchase_id的所有采购产品的列表。 > 如果要在PURCHASE中添加或插入值,表PRODUCTS将获得PURCHASE的所有值,但前提是PURCHASE中的productname不存在于PRODUCTS中的'pr

  • 问题内容: 我试图强迫MySQL使用两个索引。我正在加入一个表,我想利用两个索引之间的交叉。具体术语是“使用相交”,这是指向MySQL文档的链接: http://dev.mysql.com/doc/refman/5.0/zh-CN/index-merge- optimization.html 有什么办法可以强制实施吗?我的查询正在使用它(并且它加快了速度),但是现在无论出于何种原因它都停止了。 这

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是