gpt4 book ai didi

mysql 多列索引不工作(如预期的那样)?

转载 作者:可可西里 更新时间:2023-11-01 07:08:31 26 4
gpt4 key购买 nike

我有一张这样的 table

CREATE TABLE IF NOT EXISTS `tbl_folder` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_userid` int(11) NOT NULL,
`name` varchar(63) NOT NULL,
`description` text NOT NULL,
`visibility` tinyint(4) NOT NULL DEFAULT '2',
`num_items` int(11) NOT NULL DEFAULT '0',
`num_subscribers` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `owner_userid` (`owner_userid`),
KEY `vis_sub_item` (`visibility`,`num_subscribers`,`num_items`)
) ENGINE=InnoDB

因为我有一个关于可见性的索引,num_subscribers 和 num_items,我希望只需要查看前 15 行,相反,EXPLAIN 说 55856 行。任何想法?谢谢

EXPLAIN SELECT t.id, name, description, owner_userid, num_items, num_subscribers
FROM `tbl_folder` `t`
WHERE visibility =2
ORDER BY `t`.`num_subscribers` DESC , `t`.`num_items` DESC
LIMIT 15

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t ref vis_sub_item vis_sub_item 1 const 55856 Using where

最佳答案

您的 3 字段索引看起来不错,EXPLAIN 很有前途。

虽然它说“55856 行”,但这只是 EXPLAIN 提供的估计

因为 key_len =1,您知道它使用复合索引的第一个字节作为相等/引用。

由于您的 Extra 字段中没有提到文件排序,您知道 ORDER BY/排序 由索引处理。

如果您检查您的 handler_% session 统计信息,您将更好地了解实际读取了多少行。

侧面想法:

因为您知道您最终会访问磁盘来检索您的行,如果您的 99% 的数据具有 visibility=2(只是推测),您可能会得到同样好的结果/使用 num_subscribersnum_items 上的复合索引快速获得结果。或者,如果您在 num_subscribers 上有一个索引,则可以说是一样好/快,这取决于它的基数/唯一性。

关于mysql 多列索引不工作(如预期的那样)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4391499/

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