mysql - 我可以降低 MySQL 速度以突出显示哪个查询导致速度缓慢吗?

标签 mysql performance benchmarking

我正在开发一个用 NodeJS 编写的 API,并连接到 MySQL 5.5 数据库。在我们的实时系统上,我们有一个查询运行时间超过 7 秒。我们已将此问题追溯到几个包含超过 500 万条记录且索引不正确的表。

在我们的开发区域,我们没有那么多的记录。我想我已经确定了导致问​​题的查询,但是,由于无法在我的笔记本电脑上放置 500 万条记录(这需要很长时间才能生成),我无法证明这一点。

是否有一种设置/技术可以用来模拟拥有数百万条数据库记录,而无需实际拥有这些记录?

最佳答案

您可以编写 Perl 或 Python 脚本来填充大型测​​试表。 如果您将其作为单个事务执行,则不会花费很长时间。

如果 MySQL 有 PostgreSQL 支持的 generate_series(),那么无需脚本就可以轻松完成,但不幸的是,事实并非如此:(。

但是,您仍然可以轻松地在 MySQL(或任何其他 SQL 数据库)中创建大表,而无需编写脚本。主要思想是像这样使用 INSERT INTO ... SELECT :

CREATE TABLE mytable (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(16)
);
INSERT INTO mytable(name) VALUES ('Blah');
INSERT INTO mytable(name) SELECT name FROM mytable;
INSERT INTO mytable(name) SELECT name FROM mytable;
...

请注意,每个下一个 INSERT 双倍表大小。

使用这种方法,这个SQLFiddle使用大约 20 行 SQL 在不到 5 秒内创建100 万个测试行。

关于mysql - 我可以降低 MySQL 速度以突出显示哪个查询导致速度缓慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944236/

相关文章:

perl - Schwartzian转换何时有用?

php - Jquery 监听器在执行 load() 后不工作

php - 如何在 SQL 查询中从另一个表中检索元素?

mysql - 我可以在sql查询中使用临时值吗

C++ for 循环 : evaluation of condition

php - 输出文件时 "echo" block 有什么好处?

performance - Maven 3 提供的性能是否比 Maven 2 更好?

php - MySQL。一张表的负载转储

javascript - 在 Rails 项目中包含无关的 javascript 库的技术注意事项

sql - 深度嵌套子查询分解 (CTE) 性能缓慢