首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有未索引的列条件的Mysql大型数据集查询

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

Stack Overflow用户
提问于 2019-03-06 22:41:42
回答 2查看 29关注 0票数 1

我有一个名为user的表,总共有2000万行。表info是id, name, ctime,并且只对id进行了索引。

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

结果时间大约是7-10秒。

当我使用select min(id) from user查询时,结果时间大约是10ms。我认为原因是因为id是由mysql索引的。所以查询速度很快。

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

在mysql dev页面上,我找到了关于indexing的解释,我不知道如何应用更大的条件。

代码语言:javascript
复制
SELECT MIN(key_part2),MAX(key_part2)
FROM tbl_name WHERE key_part1=10;
EN

回答 2

Stack Overflow用户

发布于 2019-03-10 12:41:32

代码语言:javascript
复制
SELECT MIN(key_part2),MAX(key_part2)
    FROM tbl_name WHERE key_part1=10;

你需要

代码语言:javascript
复制
INDEX(key_part1, key_part2)

你所拥有的是

代码语言:javascript
复制
SELECT MIN(key_part2)                     -- id
    FROM tbl_name WHERE key_part1=10;     -- ctime

哪种需求

代码语言:javascript
复制
INDEX(ctime, id)

然而,InnoDB的二级索引会自动包含PK,所以这么说仅仅是

代码语言:javascript
复制
INDEX(ctime)

碰巧也有同样的效果。(我更喜欢说INDEX(ctime, id),作为对读者的一个提示,我需要这双鞋。)

“因为索引ctime对表来说意义不大”--好吧,它对那个查询是有意义的!因此,将其编入索引。

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

使用索引时,只需读取INDEX中的一行即可获得结果。

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

同时,

代码语言:javascript
复制
select min(id) from user

使用PRIMARY KEY并仅读取一行以获取答案。

“我在想,是否有其他方法可以在不到1秒的时间内进行查询,而无需对ctime列进行索引?”为什么这很重要?只需添加索引,即可处理此问题。

票数 1
EN

Stack Overflow用户

发布于 2019-03-07 18:23:08

我问了周围的人。似乎没有更好的方法可以在几秒钟内查询没有索引的列。就我的例子而言,mysql查询fast的最佳方式是对列ctime进行索引。

如果有更好的答案,请更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55025711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档