MYSQL在重DB中搜索速度

时间:2016-03-26 13:55:08

标签: php mysql search logging innodb

我想为我的应用程序构建一个非常大的LOG服务器,超过100个用户每隔一小时自动将他们的日志数据放在那里。 我决定使用MYSQL和Innodb。但我有一个问题:

在100个活跃用户的5年后,在每个请求中,每天每小时将100字节数据放入DB,我将有一个5 x 365 x 24 x 100 = 4380000行的表! 它的尺寸为5 x 365 x 24 x 100 x 100 = 417MB !!!

搜索速度怎么样?我认为它会变得太低了! 可以Mysql Handel这个吗? 如果我想查找一个用户的数据需要多长时间?

有更快的方法吗?

1 个答案:

答案 0 :(得分:0)

我已经对我系统上的一个非常大的Innodb表(10Go,25列,12个索引,8个外键)进行了一些测试。计算整个表非常慢,但返回索引值是免费的。 无论如何,如果你不需要进行外键检查,MyISAM会比Innodb更快

MariaDB [db]> select count(1) from {table};

+----------+
| count(1) |
+----------+
| 18865472 |
+----------+
1 row in set (29.80 sec)

MariaDB [db]> select * from {table} where {indexed_field} = 108304177;
1 row in set (0.00 sec)

回答你的意见。 假设您的日志表看起来像那样。

create table if not exists logs (
    id int(10), 
    creation_date timestamp(), 
    value int(3)
);

您可以安排创建聚合表,这样可以更快地请求图表用途

create table if not exists logs_aggregated (
    creation_date timestamp(), 
    nb_logs int(3), 
    value_average int(3)
);

insert into logs_aggregated values
select
    left(creation_date, 10) as creation_date, 
    count(1) as nb_logs, 
    avg(value) as value_average
from logs
group by left(creation_date, 10);