gpt4 book ai didi

MYSQL -- *查询一列的时间*与*表中的行数和列数*成正比?

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

我有一个 45Gb 的表,大约有 76M 行和 150 列。

当我运行以下简单查询时:

SELECT count(*) FROM my_table WHERE `column_of_interest` IS NOT NULL

返回结果需要850秒。我可以看到 mysql 进程始终以约 40Mo/秒的速度读取磁盘。这意味着它几乎遍历表中存储的全部数据,尽管它只需要了解一列。

我认为如果它可以专门读取该列的数据,速度会快 100 倍以上(因为有 150 列)。

有什么办法可以让MySQL读取单个列吗?下面提供了表格信息。

感谢您的反馈,

祝一切顺利,

伊曼纽尔

对我得到的查询使用 EXPLAIN:

'1', 'SIMPLE', 'table_name', 'ALL', NULL, NULL, NULL, NULL, '76628126', 'Using where'

引擎是InnoDB

我在列中使用 INT/FLOAT/ENUM/CHAR/VARCHAR(1) 到 VARCHAR(30) 类型

最佳答案

在您的 column_of_interest 列上创建索引。

CREATE INDEX my_tab_col_of_int ON my_table (column_of_interest);

最初设置此索引需要一段时间。在此期间,my_table不可用

之后,您显示的查询将运行得更快。这是因为索引的组织方式允许快速查询。阅读此内容:http://use-the-index-luke.com/

请注意,在大多数情况下,COUNT(colname)COUNT(*)。后一个表达式只需知道表中有多少行。前者必须查看 colname 以排除空值。需要更长的时间。

关于MYSQL -- *查询一列的时间*与*表中的行数和列数*成正比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138280/

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