我正在运行一个MySQL DB服务器。在进行负载测试时,当有数千个连接时,MySQL查询需要花费几分钟的时间。我该如何优化这种情况?
以下是我的mysql db配置的简要描述:
1. 只有对表的读取访问。 2. 使用Innodb引擎。 3. 运行了mysqltuner,并实施了其推荐的内容。 4. 系统正在处理大量查询,可能还有一半以上的连接处于打开状态。 5. 已经进行了文件系统优化。
我意识到这是一个非常广泛的问题,但希望得到任何意见。
编辑:添加更多信息:
查询非常简单,例如“select * from q6 where created_at='2013-10-02+00:00:00'”。查询将始终采用这种形式。表的模式类似于(其中一个六个巨大的表):
create table q4t_table ( created_at TIMESTAMP, tweet TEXT) engine=InnoDB;
这些表基于时间戳(或某些表中的int类型的用户ID)索引。同时只会访问其中一个表。
表的大小通常为300Mb或3Gb或8Gb。
以下是我的mysql db配置的简要描述:
1. 只有对表的读取访问。 2. 使用Innodb引擎。 3. 运行了mysqltuner,并实施了其推荐的内容。 4. 系统正在处理大量查询,可能还有一半以上的连接处于打开状态。 5. 已经进行了文件系统优化。
我意识到这是一个非常广泛的问题,但希望得到任何意见。
编辑:添加更多信息:
查询非常简单,例如“select * from q6 where created_at='2013-10-02+00:00:00'”。查询将始终采用这种形式。表的模式类似于(其中一个六个巨大的表):
create table q4t_table ( created_at TIMESTAMP, tweet TEXT) engine=InnoDB;
这些表基于时间戳(或某些表中的int类型的用户ID)索引。同时只会访问其中一个表。
表的大小通常为300Mb或3Gb或8Gb。
CREATE TABLE
的例子,是完整的表结构吗?如果是的话,那么该表上没有索引,这显然会导致非优化查询,在大表上可能需要很长时间才能运行。看起来你需要了解一下 MySQL 中正确的索引使用方法。 - Mike BrantEXPLAIN
或获取执行计划,请将结果放在问题中。如果你没有索引,请尽快访问http://use-the-index-luke.com。 - Andy Lester