小编Tom*_*Tom的帖子

尽管缺少列,但仍使用覆盖索引

我有以下查询,使用 MariaDB 10 / InnoDB:

SELECT id, sender_id, receiver_id, thread_id, date_created, content 
FROM user_message 
WHERE thread_id = 12345 
  AND placeholder = FALSE
ORDER BY date_created DESC 
LIMIT 20
Run Code Online (Sandbox Code Playgroud)

此查询根据给定的条件获取消息并按创建日期排序。

我有一个覆盖索引(thread_id, date_created)

运行 EXPLAIN 时,使用了正确的索引并且我得到了输出“Using where”,尽管查询使用的是不在索引中的语句中间的列。我可以为“placeholder = x”使用任何值,结果是一样的。

如果我将排序更改为使用另一列,则 EXPLAIN 会正确指示“使用位置。使用文件排序”。

我有一个令人头疼的时刻。有人可以解释一下吗?我希望看到的是需要额外的文件排序,因为由于额外的列而无法完全使用覆盖索引。

innodb mariadb index covering-index

8
推荐指数
2
解决办法
347
查看次数

无论更新的字段如何,数据库更新都会强制重建索引吗?

使用 MySQL (InnoDB),我知道索引会减慢 UPDATE 查询的速度。我想知道无论更新哪些字段,是否都会发生这种情况。

例如,如果我有一个包含 20 个字段的表,其中前 10 个在单个索引或覆盖索引中被引用,那么其他 10 个非索引字段的更新速度是否会受到影响?

mysql innodb index update

2
推荐指数
1
解决办法
772
查看次数

标签 统计

index ×2

innodb ×2

covering-index ×1

mariadb ×1

mysql ×1

update ×1