自动插入新表?

时间:2009-10-30 05:50:39

标签: php mysql

我将创建5个表,即data1,data2,data3,data4和data5表。每个表只能存储1000条数据记录。

当新条目或我想插入新数据时,我必须进行检查,

$ data1 = mysql_query(SELECT * FROM data1);

<?php 
  if(mysql_num_rows($data1) > 1000){
    $data2 = mysql_query(SELECT * FROM data2);
    if(mysql_num_rows($data2 > 1000){
      and so on...
    }
  }

我认为这不是正确的方法吗?我的意思是,如果我是用户4500,则需要一些时间来完成所有检查。有没有更好的方法来解决这个问题?

6 个答案:

答案 0 :(得分:3)

  

我没有决定数字,它可以是5000或10000数据。原因是灵活性和便携性?好吧,我的一位sql大师建议我这样做

除非你的导师谈论像Partitioning之类的东西,否则我会严重怀疑他的建议。如果您的数据库无法处理超过1000,5000或10000行,请查找另一个数据库。除非你有一个非常具体的例子,记录限制将如何帮助你,它可能不会。随着它增加的开销量,它可能只会使事情变得复杂而无法获得。

正确设置数据库表可以轻松处理数百万条记录。将它拆分成单独的表很可能既不会增加灵活性也不会增加可移植性。如果你积累了足够的记录来解决性能问题,那么祝贺你自己做得好,然后担心它。

答案 1 :(得分:1)

了解如何count rows in mysql

根据您使用的数据库引擎,对InnoDB表执行count(*)操作非常昂贵,这些计数应由触发器执行并在相邻的信息表中进行跟踪。

您描述的结构通常首先围绕映射表设计。一个查询映射表以查找与主键关联的目标表。

答案 2 :(得分:0)

您可以保留“跟踪”表,以跟踪请求之间的当前表。

同时警惕竞争条件(使用交易,或确保一次只运行一个进程。)

也不要使用嵌套if $data1 = mysql_query(SELECT * FROM data1);,执行以下操作:

$i = 1;
do {
  $rowCount = mysql_fetch_field(mysql_query("SELECT count(*) FROM data$i"));
  $i++;
} while ($rowCount >= 1000); 

答案 3 :(得分:0)

如果MySQL没有一些花哨的方法来自动管理(或者至少比我即将建议的更好),我会感到惊讶,但这是一种方法。

1. Insert record into 'data'
2. Check the length of 'data'
3. If >= 1000,
    - CREATE TABLE 'dataX' LIKE 'data';
      (X will be the number of tables you have + 1)
    - INSERT INTO 'dataX' SELECT * FROM 'data';
    - TRUNCATE 'data';

这意味着您将始终插入“数据”表,“data1”,“data2”,“data3”等是该表的归档版本。

答案 4 :(得分:0)

你可以create a MERGE table这样:

CREATE TABLE all_data ([col_definitions]) ENGINE=MERGE UNION=(data1,data2,data3,data4,data5);

然后,您可以使用SELECT COUNT(*) FROM all_data等查询计算总行数。

答案 5 :(得分:0)

如果您使用的是MySQL 5.1或更高版本,您可以让数据库使用分区自动处理(几乎):

Read this articlethe official documentation