- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我有一个 45Gb 的表,大约有 76M 行和 150 列。 当我运行以下简单查询时: SELECT count(*) FROM my_table WHERE `column_of_interest`
如果数组已满并且其大小增加 1 以插入新元素,则插入 N 个元素的时间可以计算为 1+2+ .. N = N^2/2。 (声明长度为 size+1 的新数组并将元素复制到新数组)。 我无法理解,如果不
我是一名优秀的程序员,十分优秀!