gpt4 book ai didi

mysql - 应该以什么顺序(表列或查询)组合索引?

转载 作者:行者123 更新时间:2023-11-29 03:02:51 25 4
gpt4 key购买 nike

我有一个示例表 -

CREATE TABLE `cdr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`dataPacketDownLink` bigint(20) DEFAULT NULL,
`dataPacketUpLink` bigint(20) DEFAULT NULL,
`dataPlanEndTime` datetime DEFAULT NULL,
`dataPlanStartTime` datetime DEFAULT NULL,
`dataVolumeDownLink` bigint(20) DEFAULT NULL,
`dataVolumeUpLink` bigint(20) DEFAULT NULL,
`dataplan` varchar(255) DEFAULT NULL,
`dataplanType` varchar(255) DEFAULT NULL,
`createdOn` datetime DEFAULT NULL,
`deviceName` varchar(500) DEFAULT NULL,
`duration` int(11) NOT NULL,
`effectiveDuration` int(11) NOT NULL,
`hour` tinyint(4) DEFAULT NULL,
`eventDate` datetime DEFAULT NULL,
`msisdn` bigint(20) DEFAULT NULL,
`quarter` tinyint(4) DEFAULT NULL,
`validDays` int(11) DEFAULT NULL,
`dataLeft` bigint(20) DEFAULT NULL,
`completedOn` datetime DEFAULT NULL,
`evedate` date NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY (`id`,`evedate`),
KEY `evedate_index` (`evedate`),
KEY `eve_hour_index` (`evedate`,`hour`),
KEY `eve_msisdn_index` (`evedate`,`msisdn`)
) ENGINE=MyISAM AUTO_INCREMENT=259341694 DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE COLUMNS(evedate)
(PARTITION `START` VALUES LESS THAN ('2013-09-01') ENGINE = MyISAM,
PARTITION p01 VALUES LESS THAN ('2013-09-08') ENGINE = MyISAM,
PARTITION p02 VALUES LESS THAN ('2013-09-15') ENGINE = MyISAM,
PARTITION p03 VALUES LESS THAN ('2013-09-22') ENGINE = MyISAM,
PARTITION p04 VALUES LESS THAN ('2013-09-29') ENGINE = MyISAM,
PARTITION p05 VALUES LESS THAN ('2013-10-06') ENGINE = MyISAM,
PARTITION p06 VALUES LESS THAN ('2013-10-12') ENGINE = MyISAM,
PARTITION p07 VALUES LESS THAN ('2013-10-19') ENGINE = MyISAM,
PARTITION p08 VALUES LESS THAN ('2013-10-25') ENGINE = MyISAM,
PARTITION p09 VALUES LESS THAN ('2013-10-31') ENGINE = MyISAM,
PARTITION p10 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */

现在查看索引 eve_hour_index(evedate,hour) 和 eve_msisdn_index(evedate,msisdn) 的顺序。但是我最后声明了 evedate。

我在某处读到复合索引中的顺序很重要。那么哪个顺序呢?在查询中排序还是在表中排序?

我是否必须将此复合索引重写为 eve_hour_index(hour,evedate) 和 eve_msisdn_index(msisdn,evedate)?

或者第一个是正确的?

谢谢。

最佳答案

简而言之,列的索引对象包含已排序的该列的值,以便可以快速找到给定的值。对于复合索引,它是类似的,但复合索引中列的值被组合和排序,因此涉及复合索引中所有列的任何查询都快得多。

请注意,如果您在 A 列和 B 列上有一个复合索引(按该顺序指定),它将大大提高在 A 和 B 上都有条件的查询的速度,有助于加快只有条件的查询的速度在 A 上,并且可能无助于加快仅在 B 上具有条件的查询。

关于mysql - 应该以什么顺序(表列或查询)组合索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20490345/

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