我正在开发一个用 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/