1

我正在尝试通过删除冗余键来优化表的架构。percona 工具包和 common_schema 都告诉我以下键是多余的:

mysql> SELECT redundant_index_name, sql_drop_index FROM redundant_keys;
+----------------------+-------------------------------------------------------------------------------+
| redundant_index_name | sql_drop_index                                                                |
+----------------------+-------------------------------------------------------------------------------+
| deviceName           | ALTER TABLE `reporting`.`tbCardData` DROP INDEX `deviceName`         |
+----------------------+-------------------------------------------------------------------------------+
1 rows in set (0.18 sec)

mysql> show create table `reporting`.`tbCardData`;

CREATE TABLE `tbCardData` (
  `pkCardDataId` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
  `deviceName` varchar(64) DEFAULT NULL,
  `shelfId` smallint(3) unsigned DEFAULT NULL,
  `cardId` smallint(3) unsigned DEFAULT NULL,
  `cardName` varchar(64) DEFAULT NULL,
  `cardType` smallint(3) unsigned DEFAULT NULL,
  `cardSubType` smallint(3) unsigned DEFAULT NULL,
  `cardSpareGroupId` smallint(3) unsigned DEFAULT NULL,
  `cardSerialNum` varchar(64) DEFAULT NULL,
  `cardCarrierSerialNum` varchar(64) DEFAULT NULL,
  `dom` tinyint(2) unsigned NOT NULL DEFAULT '0',
  `updateTime` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`pkCardDataId`),
  UNIQUE KEY `devchascarddom` (`deviceName`,`shelfId`,`cardId`,`dom`),
  KEY `deviceName` (`deviceName`),
  KEY `dom` (`dom`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我知道 deviceName Key 和唯一键 devchascarddom 共享最左边的属性 deviceName,但在我看来唯一键出现一次,而列表中有几个 deviceName。我想我要说的是,在这里删除 Key deviceName 对我来说似乎没有意义,但我不是 mysql 专家——我应该放弃它还是这只是这些工具向我报告的方式'将不得不丢弃?

4

2 回答 2

2

devchascarddomMySQL 可以像使用它一样使用复合索引的第一部分deviceName。这些工具告诉你真相。索引会更小deviceName,如果可以改掉devchascarddom,那就更好了。您必须查看EXPLAIN查询的输出,看看是否可行。

于 2013-09-07T14:37:22.163 回答
0

它是说如果它需要一个关于设备名的索引,它将使用复合唯一键 devchascarddom 来获取它,大概是因为该索引本身将由设备名索引。请注意,我不知道这是否属实,但这比复制每个成员更有意义。例如

Device1 
  Shelf1
    Card1
      dom1
      dom2

等等。现在,如果你在 Shelf 上有一个索引,它就不会说它是多余的。

于 2013-09-07T14:36:19.933 回答