如何将多维数组传输到MySQL表(通过Zeoslib)?

时间:2011-09-04 08:23:14

标签: mysql sql arrays delphi zeos

我正在使用Delphi中的Zeoslib库。

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

只需迭代一百万个插入语句吗?

3 个答案:

答案 0 :(得分:9)

  1. 您可以使用MySQL语法:INSERT INTO tab VALUES (v11,..., v1n), ..., (vm1, ..., vmn)。 IOW,您可以将数组行收集到由M行组成的块中。这将严重提高性能。 (More
  2. 您可以将数组卸载到文本文件中,然后使用LOAD DATA INFILE语句有效地加载文本文件。 (More
  3. 您可以考虑使用其他3d派对库,例如AnyDAC。它实现了Array DML功能,该功能完全适用于您的任务。 (More

答案 1 :(得分: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))

答案 2 :(得分:-1)

我遇到了同样的问题,只在php 2D数组中。保存数组的尺寸(x,y,z等长度,表示每个级别上的值的数量)。然后将整个数组加入长字符串中,除以|,等特殊的独特字符,当您获取数据时,可以根据维度数据拆分sting。

如果你需要它,我可以告诉你我的PHP代码,但我觉得你更喜欢delphi。

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