189 8069 5689

php解决大数据库,php做大数据

PHP 数据库设计,用户表数据量大该怎么优化

有很多种方法可以优化:

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比志丹网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式志丹网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖志丹地区。费用合理售后完善,十多年实体公司更值得信赖。

数据库设置主从,进行读写分离;

数据分表,如按月份分表,需要统计数据就查总表;

优化查询语句,适当增加索引;

字段优化,对不常用或者没有必要的字段可以考虑放在另外一张表里,避免单表数据过大,字段过多。

php 怎么解决 大数据量 插入数据库

ini_set('max_execution_time','0');

$pdo

=

new

PDO("mysql:host=localhost;dbname=test","root","123456");

$sql

=

"insert

into

test(name,age,state,created_time)

values";

for($i=0;

$i100000;

$i++){

$sql

.="('zhangsan',21,1,'2015-09-17')";

}

$sql

=

substr($sql,0,strlen($sql)-1);

var_dump($sql);

if($pdo

-

exec($sql)){

echo

"插入成功!";

echo

$pdo

-

lastinsertid();

}

试试吧。10万条1分钟多,我觉得还行

php+mysql在数据库里数据大的话查询很慢

1.建立索引,尽可能把索引建立到你你经常比较的字段上,如select a,b,c,d from a where 索引字段=值,这个索引字段最好是数值型数据

2.慢有更多情况,

情况1:远程查询,其实可能查询不慢,由于数据量大,传输过程慢

情况2:WHERE 后面的比较数据太多,比如 like 类的语句

情况3:需要哪个字段只取那个字段就行了,比如select * from a与select b,c,d from a速度是有差距的

3.数据库定期维护,压缩,把不常用的数据备份后放入备份库里,查询时查备份库等

问题补充:

.第一条:建立索引,怎么建立,我也听说过,但不知道怎么使用

答:每种数据建立索引的方法有差异,比如SQL SERVER 2000中可对多个字段进行索引,比如SQL SERVER2000中有命令

CREATE INDEX

为给定表或视图创建索引。

只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。

语法

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name

ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )

[ WITH index_option [ ,...n] ]

[ ON filegroup ]

index_option ::=

{ PAD_INDEX |

FILLFACTOR = fillfactor |

IGNORE_DUP_KEY |

DROP_EXISTING |

STATISTICS_NORECOMPUTE |

SORT_IN_TEMPDB

}

第三条:数据库定期维护,压缩:怎么个压缩法?及时备份数据到备份库查询备份库,那查询时不是还慢吗?

答:这个有压缩工具,基本上每种数据库都有自己的压缩数据库的工具

php数据库特别大的时候怎么查找快一点?

查找的话没办法了,毕竟你只能枚举,如果要改善的话只能从新构建数据库,添加索引字段。

或是多个数据库存放数据,根据上一个数据库提供的索引查找下一数据库的数据,这样可以减少枚举次数。

php+mysql可以处理亿级的数据吗

理论上是可以的,但效率上就有问题了,这么大量的数据一般不会放一张表里面,都会考虑分表,然后考虑索引、数据库主从、服务器配置等,提高查询效率php+mysql可以处理亿级的数据吗

在PHP中怎么解决大量数据处理的问题

mysql_query函数查询的方式是查询出全部结果后缓存到内存中,这样就会出现超内存的现象,使用另外一个函数mysql_unbuffered_query可以解决这个问题,mysql_unbuffered_query不会缓存结果集,而是查询出来数据后立马对结果集进行操作,也就是便查询边返回,这样就不会出现超出内存的现象,但是使用mysql_unbuffered_query的是时候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。例如:

使用缓存结果集的代码:

function selecttest()

{

try {

$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');

// 不使用缓存结果集方式

// $pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$sth = $pdo-prepare('select * from test');

$sth-execute();

echo '最初占用内存大小:' . memory_get_usage() . "\n";

$i = 0;

while ($result = $sth-fetch(PDO::FETCH_ASSOC)) {

$i += 1;

if ($i 10) {

break;

}

sleep(1);

print_r($result);

echo '占用内存大小:' . memory_get_usage() . "\n";

}

} catch (Exception $e) {

echo $e-getMessage();

}

}

执行时将会报超出内存的错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56

Call Stack:

0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0

0.0005 135568 2. test-selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85

0.0050 142528 3. PDOStatement-execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56

将上面代码中的$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注释去掉后将不在缓存结果集,这时运行该函数的结果如下:

最初占用内存大小:144808

Array

(

[id] = 1

[a] = v

[b] = w

[c] = i

)

占用内存大小:145544

Array

(

[id] = 2

[a] = b

[b] = l

[c] = q

)

占用内存大小:145544

Array

(

[id] = 3

[a] = m

[b] = p

[c] = h

)

占用内存大小:145536

Array

(

[id] = 4

[a] = j

[b] = i

[c] = b

)

占用内存大小:145536

可以看到,这时返回一条数据内存占用非常的小,也就700多字节,这样就不会出现超出内存的错误了。


本文名称:php解决大数据库,php做大数据
分享URL:http://jkwzsj.com/article/dsihiep.html

其他资讯