Mysql 正在吸收大数据

Mysql is sucking for large data

我有一个 MySQL 数据库,大约有 30GB 的数据。 table 中的一些包含超过 4000 万行。我正在使用 InnoDB。我在本地 PC 中仅使用 "select count(*) from table_name" 进行查询需要大约 5 分钟。我觉得我不可能加入table。我想问一下我能做些什么来提高性能。或者我需要切换到另一个数据库吗?我从来没有在数据库中遇到过这么大的数据。请帮忙。

MySQL InnoDB table 不保留行数,因此 SELECT COUNT(*) 可能会很慢。这并不表示其他查询可能如何执行,但它表示完整 table 扫描可能有多慢。五分钟对于仅 4000 万行来说确实很糟糕,并且可能表示您的数据库或磁盘存在严重问题。

这里是a performance blog on the subject. Also see this related answer.

我有 运行 mysql 个条目超过 1 亿个实例,每天提供超过 3000 万个查询。这样就可以了。

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

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

您需要了解的基础知识;

  • 此大小的数据库最好运行在配备 SSD 磁盘且至少 2 个内核的专用服务器上;
  • 您的服务器将需要大量 RAM,至少您的数据库总大小 + 20% 用于其他系统资源;
  • 确保 mysql 已经配置了足够的内存,占总 RAM 的 80%。这样做的主要设置是 innodb_buffer_pool_size;
  • 优化您的查询,并在需要的地方建立索引 - 这是一门艺术,但可以显着提高性能,学习在您的查询中使用 EXPLAIN ...

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

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

建立索引后,如果查询还是很慢,最好把数据分层次,比如sourcetables,middletables,reporttables。报告 table 只存储一些最终数据,查询会很快,还可以为它创建索引。

第三,如果上述不能满足您的要求,请尝试使用memsql之类的东西。

此外,学习一些命令,如:

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