gpt4 book ai didi

mysql - 使用 IN() 子句导致 Filesort

转载 作者:可可西里 更新时间:2023-11-01 07:04:33 25 4
gpt4 key购买 nike

我有一个简单的表格->

id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
by_id INT UNSIGNED NOT NULL
posted_on INT UNSIGNED NOT NULL

我的表引擎是 MyISAM

我在 by_id,posted_on,id 上有一个名为 combo1 的多列索引

我运行这个查询 ->

EXPLAIN SELECT * FROM books 
WHERE by_id = '1' AND posted_on = '0'
ORDER BY id DESC LIMIT 7;

Extra 列显示 Using where 和 key 列显示 combo1

但是,当我运行这个查询时 ->

EXPLAIN SELECT * FROM books 
WHERE by_id IN(1,7,10) AND posted_on = '0'
ORDER BY id DESC LIMIT 7;

Extra 列表示 Using where;使用 filesort 和键列表示 combo1

为什么在第二种情况下会出现 filesort,即使 QEP 显示优化器正在使用其中包含“id”索引的索引 combo1。

最佳答案

索引是一个B+树。这意味着在 by_id 1 下有所有 posted_on 为 0 和 by_id 为 1 的记录,然后您拥有这些记录的所有 ID。然而,在 by_id 7 下,您有另一个 Twig ,其中包含 posted_on 0 的记录,并且它们包含带有 ID 的记录。

当你有 in 子句时,你正在检索树的 3 个不同分支,你必须合并它们并求助它们,因为具有 1,2,4 的 ID 可能在 by_id 1 下,但 3,5 在 by_id 10 下; MySQL 检索 1,2,4,3,5 并且必须求助于它们。

第一种情况只有一个分支,并且每个分支都已经排序

关于mysql - 使用 IN() 子句导致 Filesort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14996640/

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