MySQL巨大的表选择性能

时间:2012-04-03 19:24:34

标签: mysql

我目前有一个包含1000万行的表,需要大幅提升性能。

我曾考虑将这1张表分成20个500k的较小表,但我无法提高性能。

我为4列创建了4个索引,并将所有列转换为INT,我有另一个列。

我的基本查询是select primary from from mytable where column1 = int and bitcolumn = b'1',这仍然很慢,我能做些什么来提高性能?

服务器规范

32GB内存,2TB存储空间,并使用标准的ini文件,我的处理器也是AMD Phenom II X6 1090T

5 个答案:

答案 0 :(得分:0)

除了为mysql服务器提供更多内存之外,还要删除不必要的索引,并确保在column1上有索引(在您的情况下)。如果可能的话,为sql添加一个limit子句。

答案 1 :(得分:0)

没有足够的信息来可靠地诊断问题,但是您声明在具有32G内存的系统上使用“默认”my.cnf / my.ini文件。

MySQL Documentation发出以下预先配置的文件:

  • 小:系统有<64MB内存,并且不经常使用MySQL。
  • 中:系统至少有64MB内存
  • 大:系统至少有512MB内存,服务器主要运行MySQL。
  • 巨大:系统至少有1GB内存,服务器主要运行MySQL。
  • 重:系统至少有4GB内存,服务器主要运行MySQL。

最好的情况是,您正在使用一个配置文件,该文件利用系统内存的1/8(如果您使用的是“重”文件,据我所知,这不是默认文件。我认为默认值为中等或大可能。

我建议您正确编辑my.cnf文件。

several areas of MySQL可以调整内存分配,以最大限度地提高特定情况的性能。您可以在此处发布my.cnf / my.ini文件以获取更具体的建议。您还可以使用MySQL Tuner获取一些自动建议。

答案 2 :(得分:0)

下载(在您的服务器上):

MySQLTuner.pl

安装它,运行它并查看它的内容 - 甚至更好地粘贴输出。

答案 3 :(得分:0)

我做了一些与查询时间有很大不同的事情 但这可能并非对所有情况都有用,仅就我而言

我有一张巨大的桌子(大约2,350,000条记录),但是我可以期待应该与之比赛的确切位置

所以我添加了这个条件WHERE id > '2300000',因为我说的是我的情况,但这可能会帮助其他人 因此完整的查询将是:

SELECT primary from mytable where id > '2300000' AND column1 = int AND bitcolumn = b'1'

查询时间为2〜3秒,且不小于0.01

答案 4 :(得分:-1)

首先,您的查询

select primary from from mytable where column1 = int and bitcolumn = b'1' 

有一些错误,例如两个from子句。第二件事,拆分表并使用不必要的索引永远不会有助于提高性能。要遵循的一些提示是:

  

1)如果反复查询某些列,请使用复合索引。但必须采取预防措施,因为在复合索引中,在索引中放置列的顺序非常重要。

     

2)如果主键位于int列,则更有帮助。

     

3)阅读一些有关索引和优化的文章,它们很多,在Google上搜索。