Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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永无止境';复制到tmp表';使用db视图和左连接_Mysql_Sql_Join_View_Left Join - Fatal编程技术网

MySQL永无止境';复制到tmp表';使用db视图和左连接

MySQL永无止境';复制到tmp表';使用db视图和左连接,mysql,sql,join,view,left-join,Mysql,Sql,Join,View,Left Join,我有MySQL的性能问题。数据库包含大约400000条记录,站点运行在Drupal上,所有ColluMN都有索引。不幸的是,有些广告没有所有的数据,所以我需要使用左连接而不是内部连接 视图: 我的数据库配置: max_connections = 300 connect_timeout = 100 max_user_connections = 300 key_buffer = 256M query_cache_size = 96MB query_cache_limit = 4MB table_ca

我有MySQL的性能问题。数据库包含大约400000条记录,站点运行在Drupal上,所有ColluMN都有索引。不幸的是,有些广告没有所有的数据,所以我需要使用左连接而不是内部连接

视图:

我的数据库配置:

max_connections = 300
connect_timeout = 100
max_user_connections = 300
key_buffer = 256M
query_cache_size = 96MB
query_cache_limit = 4MB
table_cache = 1800
table_definition_cache = 1800
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
tmp_table_size = 64MB
join_buffer_size = 4M
wait_timeout = 60
innodb_buffer_pool_size = 2G
innodb_log_file_size = 1G
max_heap_table_size = 128M
tmp_table_size = 128M
max_allowed_packet = 32M
thread_cache_size = 128
在我启动mysql服务器站点后,搜索速度很快,但几个小时后,“复制到tmp表”开始复制越来越多的数据,serwer变得越来越慢,最终崩溃。 系统具有8GB的RAM及其双核


请帮忙

我认为在这种特殊情况下,首先查找要选择的行的ID,然后添加其他表可能会更快。玩一玩

select <fields>
from node n
<joins>
where nid in 
  ( select nid 
    from node 
    where n.status = 1 
      and n.type = 'advertisement
  )

您也可以尝试解释一下,看看哪里慢。

尝试增加连接缓冲区大小。在我看来,你的ram不够。一旦innodb_缓冲池满了,您可能会遇到问题。实际上,您可以将innodb_buffer_大小设置为总大小的80%,因此6在这种情况下,请确保将日志文件的大小增加到innodb_buffer_pool_大小的至少25%。所以最小2GB。它也可以是查询缓存。如果这是一个大的,它需要时间的服务去通过查奇。尝试完全禁用它或将其设置为非常低。顺便说一句,这些表是否得到了大量更新?。您能从select查询中也提供一个解释吗?我在google文档上发布了查询解释,以使其更具可读性:在(v.field\u adpersonname\u值,如'Sample name%'ESCAPE'\')和(v.field\u adpersonfamilyname\u值,如''%ESCAPE'\')和(v.field\u adpersondateofborn\u值,如“%”ESCAPE“\\”)和(v.field\u adpersondateOfDid\u值,如“%”ESCAPE“\\”)?我已经解决了tempfs的问题,但我想你明白了,我也会尝试一下。谢谢。
max_connections = 300
connect_timeout = 100
max_user_connections = 300
key_buffer = 256M
query_cache_size = 96MB
query_cache_limit = 4MB
table_cache = 1800
table_definition_cache = 1800
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
tmp_table_size = 64MB
join_buffer_size = 4M
wait_timeout = 60
innodb_buffer_pool_size = 2G
innodb_log_file_size = 1G
max_heap_table_size = 128M
tmp_table_size = 128M
max_allowed_packet = 32M
thread_cache_size = 128
select <fields>
from node n
<joins>
where nid in 
  ( select nid 
    from node 
    where n.status = 1 
      and n.type = 'advertisement
  )
select n.fields,
  (select field_adpersonid_value from field_data_field_adpersonid i ON i.entity_id = n.nid) as field_adpersonid_value
from node n
where .. etc