Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何加快统计模块的速度?_Mysql_Database_Drupal_Optimization - Fatal编程技术网

Mysql 如何加快统计模块的速度?

Mysql 如何加快统计模块的速度?,mysql,database,drupal,optimization,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_titl

统计模块中的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());
表结构:


+------------+------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+------------+------------------+------+-----+---------+----------------+
|aid | int(11)| NO | PRI | NULL |自动增量|
|希德|瓦查尔(64)|不| | | ||
|标题| varchar(255)|是| |空||
|路径| varchar(255)|是| |空||
|url | varchar(255)| YES | | NULL ||
|主机名| varchar(128)|是| |空||
|uid | int(10)无符号| YES | MUL | 0 ||
|计时器| int(10)无符号| NO | 0 ||
|时间戳| int(10)无符号| NO | MUL | 0 ||
|uri | varchar(255)| YES | | NULL ||
+------------+------------------+------+-----+---------+----------------+
行(当前):522737
类型: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      |         |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
|表|非唯一|键|名称|索引中的顺序|列|名称|排序规则|基数|子|部分|压缩|空|索引|类型|注释|
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
|accesslog | 0 | PRIMARY | 1 | aid | A | 522858 | NULL | NULL | BTREE ||
|accesslog | 1 | accesslog | U时间戳| 1 |时间戳| A | 522858 | NULL | NULL | BTREE ||
|accesslog | 1 | uid | 1 | uid | A | 164 | NULL | NULL | YES | BTREE ||
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+


编辑3:我的老板和我决定不登录搜索引擎机器人。我仍在努力找出最好的方法。如果您有任何想法,请告诉我。

您也可以从数据库方面尝试。只需确保您在某个地方有备份

那张表有大量索引吗?去掉一些会给你带来动力

“除了分析之外,我们实际上还将此表用于其他方面……比如 显示用户上次查看的项目。“

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

@edit1&2:尝试一下(确保备份两次)
altertablename-TYPE=[InnoDB | MyISAM]
,您可能需要尝试运行一些数据库优化并微调一些数据库配置

@编辑2:根据你的最新情况,你的桌子在我看来很好。而drupal方面的瓶颈似乎更可能是从其他表获取变量。 您可以通过计时在cml和drupal中运行插入查询来比较速度


一些额外的

这可能是一种选择,但这不取决于我。我仍然需要加快速度的方法。@Clive或。尝试分解查询中的每个元素(调用
ip\u address()
timer\u read()
,等等),看看这些是否是造成瓶颈的原因。如果是,找到更好的方法获取数据。如果没有,要么把站点放在更快的服务器上,要么定期截断表,这就是你所能做的do@JamWaffles:我不知道有人在为大家欢呼:)你所说的高索引是什么意思?拆分它是什么意思?我同意切换到innodb,因为这是一个写量很大的表。如果您没有添加任何Drupal没有添加的索引,那么索引应该不会太糟糕。此外,拆分表会比它的价值更麻烦。只是扩展一下@gerrlingguy所说的,索引将提高读取速度,而以写入速度为代价,因此如果有很多不必要的索引,插入查询将非常慢。拆分表请参阅。这个解决方案可能有点过分,但是一旦您的数据库显著增大,它将给您带来一些可靠的性能提升。
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| 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      |         |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+