Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 如何提高具有5000万条记录且不断增长的表的性能_Mysql_Sql_Database Performance - Fatal编程技术网

Mysql 如何提高具有5000万条记录且不断增长的表的性能

Mysql 如何提高具有5000万条记录且不断增长的表的性能,mysql,sql,database-performance,Mysql,Sql,Database Performance,我们有两个表,表A和表B(包含5000万条记录)。在表A中,我们存储了商户的唯一值。因此,我们从表B中获取了记录。如何提高查询的性能,以及提高查询性能的方法是什么 注:两个表的表结构都很简单。 表A-存储引擎(MyISAM) 表B-存储引擎(MyISAM) 在表A中,我们有一个主键对应于表B的许多记录。 使用的查询: 查询1: records = "select field1, field2... from table A where merchant_id = '' and field

我们有两个表,表A和表B(包含5000万条记录)。在表A中,我们存储了商户的唯一值。因此,我们从表B中获取了记录。如何提高查询的性能,以及提高查询性能的方法是什么

注:两个表的表结构都很简单。
表A-存储引擎(MyISAM)
表B-存储引擎(MyISAM)
在表A中,我们有一个主键对应于表B的许多记录。
使用的查询:
查询1:

records = "select field1, field2...  from table A where merchant_id = ''   
and field_date between '23-06-2012' and '23-06-2015' order by field 1";
查询2:在循环中执行

  foreach (records as records) {
      "select field_b1, field_b2, .. from table B where field_b1 =    
'records['field1']'"
   }

如果您还没有这样做,请在
表\u a.商户\u id
表\u a.字段\u date
上添加索引。 同时在
表2.字段\u b1
上添加索引

此外,您可以尝试使主
表b
上选择
将它与
表a
中的记录连接起来。比如:

select 
B.field_b1, B.field_b2 
from table_b AS B 
LEFT JOIN table_a AS A on B.field_b1 = A.field_1
WHERE A.merchant_id = '' AND A.field_date between '23-06-2012' and '23-06-2015' 
order by field 1;

这样,您对所有记录只有一个查询,而不是一个主查询+谁知道在第一个查询中找到的每条记录有多少个附加查询。

您应该将逻辑重写为单个查询。并且,使用ISO标准日期格式:

select a.field1, a.field2... , b.field1, b.field2, . . 
from a left join
     b
     on a.field1 = b.field1
where a.merchant_id = '' and
      a.field_date between '2012-06-23' and '2015-06-23'
order by a.field1;
对于此查询,您需要索引:
a(商户id,字段日期,字段1)
b(字段1)

注意:如果只查找一个日期,请不要在
之间使用
。只需使用
=

select a.field1, a.field2... , b.field1, b.field2, . . 
from a left join
     b
     on a.field1 = b.field1
where a.merchant_id = '' and
      a.field_date = '2012-06-23'
order by a.field1;

查询应该运行得更快。

您的查询在哪里,表结构是什么。购买更快的服务器(SSD而不是机械驱动器),为其提供大量RAM,配置MySQL以利用此类硬件。还有什么吗?你没有给我们太多的工作空间。两个表的
show create table tblnm
输出不会伤到任何人的心。手写的胡言乱语不算数也没用