gpt4 book ai didi

MySQL 似乎忽略了日期时间列上的索引

转载 作者:行者123 更新时间:2023-11-29 05:12:50 24 4
gpt4 key购买 nike

在比较或操作 MySQL 表中的两个日期时间列时,我遇到了一个非常严重的性能问题。我有一个表 tbl,它有大约 1000 万行。它看起来像这样:

`id` int(11) NOT NULL AUTO_INCREMENT,
`last_interaction` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`last_maintenence` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
PRIMARY KEY (`id`),
KEY `last_maintenence_idx` (`last_maintenence`),
KEY `last_interaction_idx` (`last_interaction`),
ENGINE=InnoDB AUTO_INCREMENT=12389814 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

当我运行这个查询时,它需要大约一分钟的时间来执行:

SELECT id FROM tbl
WHERE last_maintenence < last_interaction
ORDER BY last_maintenence ASC LIMIT 200;

描述查询呈现如下:

          id: 1
select_type: SIMPLE
table: tbl
type: index
possible_keys: NULL
key: last_maintenence_idx
key_len: 5
ref: NULL
rows: 200
Extra: Using where

看起来 MySQL 没有找到/使用 last_interaction 上的索引。有人知道为什么会这样以及如何触发它吗?

最佳答案

那是因为mysql 通常每个表只使用一个索引。不幸的是,您的查询看起来很简单。解决方案是创建一个涉及两列的复合索引。

关于MySQL 似乎忽略了日期时间列上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37025370/

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