gpt4 book ai didi

mysql - 多列索引与多索引

转载 作者:IT老高 更新时间:2023-10-29 00:15:03 25 4
gpt4 key购买 nike

我在 MySQL 数据库中有下表:

CREATE TABLE `secondary_images` (
`imgId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`primaryId` int(10) unsigned DEFAULT NULL,
`view` varchar(255) DEFAULT NULL,
`imgURL` varchar(255) DEFAULT NULL,
`imgDate` datetime DEFAULT NULL,
PRIMARY KEY (`imgId`),
KEY `primaryId` (`primaryId`),
KEY `imgDate` (`imgDate`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

SQL 将如下所示:

SELECT imgURL, view FROM secondary_images 
WHERE primaryId={$imgId} ORDER BY imgDate DESC

如您所见,我制作了 primaryIdimgDate 索引键。我的想法是因为 WHERE 子句使用 primaryId 查询结果,而 ORDER 子句使用 imgDate

我的问题是,像我现在这样使用多个索引会更好吗?或者我应该多列索引(目前我不太了解)?

这是我从 EXPLAIN 中得到的:

id = 1   
select_type = simple
table = secondary_images
type = ref
possible_keys = primaryId
key = primaryId
key_len = 5
ref = const
rows = 1
extra = Using where; Using filesort

注意:这不是使用多列索引,而是使用上表描述的结果。

最佳答案

您应该在 (primaryId, imgDate) 上使用多列索引,以便 MySQL 能够使用它来选择行和排序。

如果用于排序的所有列都不在用于选择的索引中,则 MySQL 使用“filesort”策略,该策略包括对所有行进行排序(如果行数不多,则在内存中; 在其他磁盘上)。

如果用于排序的所有列都在索引中,MySQL 使用索引来获取行顺序(有一些限制)。

MySQL 使用树结构作为索引。这允许直接按顺序访问键而无需排序。

多列索引基本上是列串联的索引。这允许 MySQL 找到匹配 primaryId={$imgId} 的第一行,然后以正确的顺序直接访问所有其他行。

primaryId 上使用单行索引,MySQL 可以找到所有匹配 primaryId={$imgId} 的行,但它会以无特定顺序查找行;所以它必须在那之后对它们进行排序。

EXPLAINORDER BY Optimization .

关于mysql - 多列索引与多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261536/

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