Mysql正在吸收大数据

时间:2015-11-11 03:37:27

标签: mysql database heidisql

我有一个包含大约30GB数据的MySQL数据库。一些表包含超过4000万行。我使用InnoDB。我只通过在本地PC中使用“select count(*)from table_name”来查询,大约需要5分钟。我想我加入桌子是不可能的。我想问一下我能做些什么来提高性能。或者我需要切换到另一个数据库?我从未在DB中遇到如此大的数据。请帮忙。

3 个答案:

答案 0 :(得分:4)

我运行了超过1亿条记录的mysql实例,每天提供超过3000万条查询。所以可以做到。

如果配置相似,任何其他数据库系统都会遇到您遇到的问题。

我只能给你一些提示,如果这是关键任务,请考虑聘请专业人士来调整你的系统。

您需要了解的基础知识;

  • 此大小的数据库最好在具有SSD磁盘的专用服务器上运行,并且至少有2个核心;
  • 您的服务器需要大量的RAM,至少是您的总数据库大小+其他系统资源的20%;
  • 确保mysql配置了足够的内存,占总RAM的80%。执行此操作的主要设置为innodb_buffer_pool_size;
  • 优化您的查询,并在需要的位置编制索引 - 这是一门艺术,但可以大幅提升效果,学会在查询中使用EXPLAIN ...

答案 1 :(得分:0)

MySQL InnoDB表不保留行数,因此SELECT COUNT(*)可能很慢。它并不表示其他查询可能如何执行,但它表明全表扫描的速度有多慢。只有4000万行,五分钟非常糟糕,可能表明您的数据库或磁盘存在严重问题。

这是a performance blog on the subject。还see this related answer

答案 2 :(得分:0)

我以前遇到过大日期问题,希望我的经验对你有用。

首先,您需要为表创建索引,但应根据您的查询逻辑使用哪种索引。

索引之后,如果查询仍然很慢,则最好将数据划分为层次结构,例如源表,中间表和报表。报表只存储一些最终数据,查询速度很快,也为它创建索引。

第三,如果上面提到的不能满足你的要求,尝试使用像memsql这样的东西。

此外,学习一些命令:

set profiling = 1
do some slow query 
show profiles;
SHOW PROFILE FOR QUERY N;