2

我在 Delphi 中使用Zeoslib库。

我有一个大型多维静态数组,需要将其传输到本地 MySQL 数据库中的空表。我怎样才能有效地做到这一点?

只需遍历一百万个插入语句?

4

3 回答 3

9
  1. 您可以使用 MySQL 语法:INSERT INTO tab VALUES (v11,..., v1n), ..., (vm1, ..., vmn). IOW,您可以将数组行收集成由 M 行组成的块。这将大大提高性能。(更多)
  2. 您可以将数组卸载到文本文件中,然后使用LOAD DATA INFILE语句有效地加载文本文件。(更多)
  3. 您可以考虑使用其他 3d 方库,例如 AnyDAC。它实现了 Array DML 功能,该功能完全适合您的任务。(更多)
于 2011-09-04T08:57:39.217 回答
0

多维数组不能很好地转换为 MySQL。

如果您正在处理一个小型阵列,您可能会完成任务,但它只是无法扩展。无论如何,它很快就会变得丑陋。

  • 对于一个简单的二维数组,您可以考虑为一个维度创建一列,并为另一个维度使用行。但是,一个表中的列不能超过 4096:

http://dev.mysql.com/doc/refman/4.1/en/column-count-limit.html

每个表有 4096 列的硬性限制,但给定表的有效最大值可能会更少。确切的限制取决于以下讨论中列出的几个相互作用的因素。

每个表的最大行大小为 65,535 字节。此最大值适用于所有存储引擎,但给定引擎可能具有导致有效最大行大小较低的其他约束。

  • 或者,您可以为每个数组项创建一行,并将每个维度的索引存储为主键。但是当您要检索值时,您需要创建一个怪物查询。
  • 你要么需要做:
    • 多个联接,但您只能在一个查询中进行 61 次联接:

http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html

单个连接中可以引用的最大表数为 61。这也适用于视图定义中可以引用的表数。

    • 或者创建一个查询,按行键分组,并通过组合函数和条件有条件地选择正确的值,如下所示: sum(if(x=1,y,0))
于 2011-09-04T10:47:06.203 回答
-1

我有同样的问题,只在 php 2D 数组中。保存数组的维度(x、y、z 等长度,表示每个级别的值的数量)。然后将整个数组连接成一个长字符串,用一个特殊的、唯一的字符(如|or ,)分割,当你获取数据时,你可以根据维度数据分割字符串。

如果你需要它,我可以给你看我的 php 代码,但我看你更喜欢 delphi。

编辑:这是在您编辑之前对您的问题的回答。现在有点无关紧要了。

于 2011-09-04T08:46:40.693 回答