gpt4 book ai didi

具有未索引的列条件的Mysql大数据集查询

转载 作者:行者123 更新时间:2023-11-29 07:23:30 25 4
gpt4 key购买 nike

我有一个名为 user 的表,总共有 2000 万行。表信息是 id, name, ctime 并且只有 id 被索引。

我想查询 select min(id) from user where citme > 1521882950

结果时间约为 7-10 秒。

当我使用 select min(id) from user 进行查询时,结果时间约为 10 毫秒。我认为原因是因为 id 被mysql索引了。所以查询很快。

既然索引ctime对于表来说意义不大,我在想是否有另一种方法可以在不索引ctime列的情况下在不到1秒内进行查询?

从 mysql 开发页面,我发现了关于 indexing 的解释, 我不知道如何应用更大的条件。

SELECT MIN(key_part2),MAX(key_part2)
FROM tbl_name WHERE key_part1=10;

最佳答案

为了

SELECT MIN(key_part2),MAX(key_part2)
FROM tbl_name WHERE key_part1=10;

你需要

INDEX(key_part1, key_part2)

你拥有的是

SELECT MIN(key_part2)                     -- id
FROM tbl_name WHERE key_part1=10; -- ctime

需要什么

INDEX(ctime, id)

然而,InnoDB的二级索引自动包含PK,所以只是说

INDEX(ctime)

恰好有同样的效果。 (我更喜欢说 INDEX(ctime, id) 作为读者的线索,我需要那对。)

“因为索引 ctime 对表来说意义不大”——好吧,它对那个查询很有意义!所以,索引它。

如果没有索引,将读取整个表来处理查询。

有了索引,INDEX 中的只有一个 行将被读取以获得结果。

这是最极端的情况(有索引与没有索引)。

同时,

select min(id) from user

使用 PRIMARY KEY 并读取仅一个行来获得答案。

“我在想是否有另一种方法可以在不索引 ctime 列的情况下在不到 1 秒内进行查询?”为什么这有关系?只需添加索引即可解决问题。

关于具有未索引的列条件的Mysql大数据集查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55025711/

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