MySQL PDO 在 3 秒或更短时间内创建并填充 1000 个小表?
MySQL PDO create and populate 1000 small tables in 3 seconds or less?
可能吗?从一个单一的进程?
数据库在 SATA 磁盘上。
我正在使用 ubuntu 14.04。所有 table 都有 20-60 行和 6 列。
我正在使用交易。
当前序列是:
- 创建table
- 开始交易
- 插入#1
- 插入#2
- ...
- 插入 #n
- 提交
现在我得到大约 3-4 tables/second。
结论: 当我禁用日志记录时,我的性能变得与 phpmyadmin 相似。因此,正如 Rick James 所建议的那样,我想如果没有更快的存储,就无法实现进一步的改进。
对于创建 table 你可以执行多语句查询(PDO 支持这个)所以在一个查询中你可以创建多个 table 和 t 用于插入
您可以使用批量插入准备一个 sql 具有重复插入值的插入查询,然后作为单个查询执行
批量插入基于
INSERT INTO your_table( col1, col2,,,)
VALUES ( val1_1, val1_2 ,,,),
( vale2_1, val2_2 ,,,),
....
然后你可以基于这些技术构建一个 PDO 查询并执行事实,如果你的单个语句而不是每个语句作为 ne 值的数量你可以在查询中插入数千个值并获得结果几秒钟后
the Use the multiple-row INSERT syntax reduce communication overhead
between the client and the server if you need to insert many rows This
tip is valid for inserts into any table, not just InnoDB tables.
在旋转驱动器上,每秒可以进行大约 100 次操作。 CREATE TABLE
可能较慢,因为它涉及 OS 中的多个文件操作。所以,我预计 1000 CREATE TABLEs
需要超过 10 秒。那是 Ubuntu; Windows.
更长
制作多个相同的 table 通常是糟糕的架构设计;取而代之的是单个 table 和一个额外的列来区分子集。
INSERTing
40K 行--
- 40K 单行
INSERTs
with autocommit=ON
-- 400 秒。
- 1000 多行
INSERTs
,每行 20-60 行,在每个语句之后再次 COMMITted
-- 10 秒。
- 具有 40K 行的单个
INSERT
(如果您没有突破其他限制)——可能不到 1 秒。
不要使用多语句查询;这是一个潜在的安全问题。反正也没多大用。
可能吗?从一个单一的进程? 数据库在 SATA 磁盘上。 我正在使用 ubuntu 14.04。所有 table 都有 20-60 行和 6 列。 我正在使用交易。
当前序列是:
- 创建table
- 开始交易
- 插入#1
- 插入#2
- ...
- 插入 #n
- 提交
现在我得到大约 3-4 tables/second。
结论: 当我禁用日志记录时,我的性能变得与 phpmyadmin 相似。因此,正如 Rick James 所建议的那样,我想如果没有更快的存储,就无法实现进一步的改进。
对于创建 table 你可以执行多语句查询(PDO 支持这个)所以在一个查询中你可以创建多个 table 和 t 用于插入 您可以使用批量插入准备一个 sql 具有重复插入值的插入查询,然后作为单个查询执行
批量插入基于
INSERT INTO your_table( col1, col2,,,)
VALUES ( val1_1, val1_2 ,,,),
( vale2_1, val2_2 ,,,),
....
然后你可以基于这些技术构建一个 PDO 查询并执行事实,如果你的单个语句而不是每个语句作为 ne 值的数量你可以在查询中插入数千个值并获得结果几秒钟后
the Use the multiple-row INSERT syntax reduce communication overhead between the client and the server if you need to insert many rows This tip is valid for inserts into any table, not just InnoDB tables.
在旋转驱动器上,每秒可以进行大约 100 次操作。 CREATE TABLE
可能较慢,因为它涉及 OS 中的多个文件操作。所以,我预计 1000 CREATE TABLEs
需要超过 10 秒。那是 Ubuntu; Windows.
制作多个相同的 table 通常是糟糕的架构设计;取而代之的是单个 table 和一个额外的列来区分子集。
INSERTing
40K 行--
- 40K 单行
INSERTs
withautocommit=ON
-- 400 秒。 - 1000 多行
INSERTs
,每行 20-60 行,在每个语句之后再次COMMITted
-- 10 秒。 - 具有 40K 行的单个
INSERT
(如果您没有突破其他限制)——可能不到 1 秒。
不要使用多语句查询;这是一个潜在的安全问题。反正也没多大用。