我将创建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,则需要一些时间来完成所有检查。有没有更好的方法来解决这个问题?
答案 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或更高版本,您可以让数据库使用分区自动处理(几乎):