gpt4 book ai didi

mysql - 使用复合主键与简单索引的性能有什么区别?

转载 作者:行者123 更新时间:2023-11-29 14:03:45 26 4
gpt4 key购买 nike

我使用 innodb mysql 表来存储数据。在我的项目中,我必须将 maxmind geoip 数据库存储在 mysql 中(以具有具有不同实体的 native 外键)。

大多数教程如何在 mysql 中导入 maxmind geoip 数据库建议遵循带有 IP 范围的表的表定义:

CREATE TABLE IF NOT EXISTS `GeoLiteCity_Blocks` (
`startIpNum` int(10) unsigned NOT NULL,
`endIpNum` int(10) unsigned NOT NULL,
`locId` int(10) unsigned NOT NULL,
PRIMARY KEY (`startIpNum`,`endIpNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但是我使用的是 ORM,它需要一个主键(它自动实现 CRUD 实体的许多方法),所以我想使用不同的表结构:

CREATE TABLE `ipblocks` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`startIpNum` int(10) unsigned NOT NULL,
`endIpNum` int(10) unsigned NOT NULL,
`locId` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `IP_RANGE` (`startIpNum`,`endIpNum`),
KEY (`locId`) // FOREIGN KEY
) ENGINE=InnoDB;

对此表最常见的查询是:

SELECT locId FROM ipblocks
WHERE %IP_ADDRESS% BETWEEN startIpNum AND endIpNum
LIMIT 1

理论上,这允许原生用作 ORM,就像使用表数据一样。我想问 - 这会严重降低性能吗(我不关心硬盘空间,性能对我来说更重要)?

包含 ip block 的表大约有 200 万行。

最佳答案

性能不会显着下降。唯一真正产生影响的是表中的数据发生变化,但看起来数据基本上是静态的。使用的索引基本相同,但InnoDB使用聚集索引,因此基本上需要进行2次索引查找而不是一次,但所花费的时间不会被注意到。

关于mysql - 使用复合主键与简单索引的性能有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686954/

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