繁体   English   中英

MySQL巨大表选择性能

[英]MySQL Huge table select performance

我目前有一个包含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

除了为mysql服务器提供更多的可用内存之外,还要删除不必要的索引并确保您在column1上具有索引(针对您的情况)。 如果可能,将限制子句添加到sql。

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

MySQL文档提供以下预配置文件:

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

最好的情况是,您正在使用的配置文件占用了系统内存的1/8(如果您使用的是“ Heavy”文件,据我所知这不是默认文件。我认为默认文件是中或大)。

我建议适当地编辑my.cnf文件。

MySQL的几个区域可以对其内存分配进行调整,以使特定情况下的性能最大化。 您可以在此处发布my.cnf / my.ini文件,以获取更多具体建议。 您还可以使用MySQL Tuner获得一些自动化建议。

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

MySQLTuner.pl

安装它,运行并查看其含义-甚至更好地将输出粘贴到此处。

我在查询时间上做出了很大的改变,但这并不是在所有情况下都有用,就我而言

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

所以我添加了这个条件WHERE id > '2300000'就像我说WHERE id > '2300000'那样,但这可能会帮助其他人,所以完整的查询将是:

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

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

首先,您的查询

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

有一些错误,例如两个from子句。 其次,拆分表并使用不必要的索引对性能毫无帮助。 要遵循的一些技巧是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM