针对 400K 行以上大数据集的 MySQL 查询优化

标签 mysql sql

我有这个查询,它的主要目的是创建一个 View

SELECT block.id,min(block.timestamp)timestamp, historic.usd 
FROM block, historic 
WHERE block.timestamp <= historic.timestamp
GROUP BY id;

查询这些表

block 表:

| ID | timestamp              |
|  0 |  2013-08-22 00:38:05   |
|  1 |  2013-08-22 00:37:53   |

历史表:

| timestamp             | USD |
|  2013-08-22 00:37:53  | 800 |
|  2013-08-22 00:38:30  | 799 |
|  2013-08-22 00:40:53  | 789 |

它在非常小的数据集上工作得很好,但我的数据集超过 400k 行。我该如何优化它?我确实意识到我需要使用 join 来加速它。

sqlfiddle:http://sqlfiddle.com/#!2/d54afc/8

提前致谢!

最佳答案

您需要做的是使用JOIN对查询进行简单修改。

这是查询:

SELECT block.id,min(block.timestamp)timestamp, historic.usd 
FROM block
JOIN historic 
ON block.timestamp <= historic.timestamp
GROUP BY id;

这是工作 SQL Fiddle .

关于针对 400K 行以上大数据集的 MySQL 查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22319518/

相关文章:

MySQL,搜索数据库并告诉哪些表包含两个特定列?

sql - 如何通过任意节点获取树(SQL)

两列中任一列的 SQL 唯一约束

sql - Magento - 模块插入、更新、删除、选择代码

sql - Firebird 2.1 TIMESTAMP 算术和民用间隔

php - Mysql 到数组不工作

java - 在一个 JDBC 准备好的语句中插入两个不同的表

MySQL 查询 : Getting the most recent forum post

mysql - 如何使用 Chive 添加外键?

mysql - Extra :-Using where; Using temporary; Using filesort如何优化MYSQL