【发布时间】:2019-10-16 05:33:04
【问题描述】:
假设我在 mysql 数据库中有事务表,我想在 3 列引用、种类和状态上创建多列索引。
我有这个要求,我想加快速度:
Transaction.where(parent_ref: merchant_ref, kind: 'OFFER',status: 1) 执行以下 SQL:
SELECT `merchant_transactions`.* FROM `merchant_transactions`
WHERE `merchant_transactions`.`parent_ref` = '1-0001'
AND `merchant_transactions`.`kind` = 'BATCH_BET'
AND `merchant_transactions`.`status` = 1
parent_ref 列可以采用非常广泛的值,因此如果该表中有 1M 条记录,我将有 500K 不同的引用。 status 只能取 6 个不同的值,而 kind 只能取 3 个。 为了获得最佳性能,我的索引中的列的最佳顺序是什么。 我的列中值的分布是否有影响?直觉上我会说我需要从值分布最小的列开始。在那个例子中,我会做索引(种类,状态,参考)。 在确定索引的列顺序时,是否还有其他与我的表中的值相关的因素需要考虑?
【问题讨论】:
-
是的,索引中列的顺序与您需要运行的查询有关,这些查询将使用该索引。如果不先了解查询,就无法设计索引。您没有在问题中描述任何具体查询。
-
@BillKarwin 我有使用上面三个字段的查询,我试图加快速度。我想知道将具有最窄数据值分布的列放在第一位是否更聪明,或者它是否不会改变任何内容
-
我不会去猜测你的查询是什么样子的。
-
@BillKarwin 我更新了问题
标签: mysql ruby-on-rails indexing