我该怎么做才能加快统计模块的速度?

时间:2011-11-09 14:16:04

标签: mysql database drupal optimization

统计模块中的insert语句大大减慢了我们网站的速度。由于插入了更多行,问题变得更糟。当我们截断表格时,网站再次加速。我们希望保留数据,但如果可能的话,请加快速度。

 db_query("INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) values('%s', '%s', '%s', '%s', %d, '%s', %d, %d)", strip_tags(drupal_get_title()), $_GET['q'], referer_uri(), ip_address(), $user->uid, session_id(), timer_read('page'), time());

表格结构:


+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| aid        | int(11)          | NO   | PRI | NULL    | auto_increment |
| sid        | varchar(64)      | NO   |     |         |                |
| title      | varchar(255)     | YES  |     | NULL    |                |
| path       | varchar(255)     | YES  |     | NULL    |                |
| url        | varchar(255)     | YES  |     | NULL    |                |
| hostname   | varchar(128)     | YES  |     | NULL    |                |
| uid        | int(10) unsigned | YES  | MUL | 0       |                |
| timer      | int(10) unsigned | NO   |     | 0       |                |
| timestamp  | int(10) unsigned | NO   | MUL | 0       |                |
| uri        | varchar(255)     | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
行(当前):522,737
类型:MyISAM
大小:127.4 MiB

如果您需要其他信息,请与我们联系。

编辑:我对引擎类型进行了一些研究,看起来我收到了混合信息,在这种情况下myisam或innodb更好用...有人能回答吗?

编辑2:这是表格上的索引:

+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table     | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| accesslog |          0 | PRIMARY             |            1 | aid         | A         |      522858 |     NULL | NULL   |      | BTREE      |         |
| accesslog |          1 | accesslog_timestamp |            1 | timestamp   | A         |      522858 |     NULL | NULL   |      | BTREE      |         |
| accesslog |          1 | uid                 |            1 | uid         | A         |         164 |     NULL | NULL   | YES  | BTREE      |         |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

编辑3:我的老板和我决定做的不是记录搜索引擎机器人。我还在试图找出最好的方法。如果您有任何想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

你也可以尝试从db端。只需要确保你在某个地方有备份。

该表是否被严格编入索引?删除一些会给你一个提升。

  

“我们实际上将此表用于除分析之外的其他事情......就像   显示用户上次查看的项目。 “

给定混合读/写,您也可以尝试更改为innodb引擎,或者拆分它。

@ edit1& 2:尝试一下(确保你备份两次)ALTER TABLE name TYPE = [InnoDB | MyISAM],你可能想尝试运行一些db优化scripts并微调一些db配置。

@ edit2:根据你的更新,你的表对我来说很好看。并且瓶颈似乎更有可能在drupal方面从其他表获得变量。 您可以通过在cml和drupal中运行插入查询来计算速度。

一些额外的material