【发布时间】:2014-11-25 15:44:12
【问题描述】:
让我们看看下面的 MySQL 表:
CREATE TABLE prices (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
countryCode CHAR(2) COLLATE ASCII_BIN NOT NULL,
productId INT(10) UNSIGNED NOT NULL,
merchantId INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id),
INDEX (countryCode, productId, merchantId)
) ENGINE=InnoDB;
我将在此表上进行的唯一查找将是:
WHERE countryCode = ? AND productId = ?WHERE countryCode = ? AND productId = ? AND merchantId = ?
因此索引可以用于所有查询,这很好。
并非所有查询都包含merchantId,因此最好将其用作复合索引中的最后一列。
现在关于前两列:我永远不会单独查找 countryCode 或单独查找 productId,所以乍一看,我敢打赌使用索引列顺序 (countryCode, productId, merchantId)或 (productId, countryCode, merchantId) 在性能方面对我的用例没有任何影响,但我没有理论知识来支持这一点。
鉴于productIds 比countryCodes 更多不同,是否有任何性能差异(不仅SELECT,还有INSERT、UPDATE 和DELETE 速度) 来改变索引中这两列的顺序,当它们总是一起使用时?
【问题讨论】:
标签: mysql performance indexing