我有一个包含大约30GB数据的MySQL数据库。一些表包含超过4000万行。我使用InnoDB。我只通过在本地PC中使用“select count(*)from table_name”来查询,大约需要5分钟。我想我加入桌子是不可能的。我想问一下我能做些什么来提高性能。或者我需要切换到另一个数据库?我从未在DB中遇到如此大的数据。请帮忙。
答案 0 :(得分:4)
我运行了超过1亿条记录的mysql实例,每天提供超过3000万条查询。所以可以做到。
如果配置相似,任何其他数据库系统都会遇到您遇到的问题。
我只能给你一些提示,如果这是关键任务,请考虑聘请专业人士来调整你的系统。
您需要了解的基础知识;
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;