MySQL单表已使用索引但查询大数据结果时慢的解决办法

目前做的项目使用MySQL数据库,其中有张表包含近1000万条记录,表结构如下:

 FieldTypeComment
idint(11) NOT NULL主键(PK)
 yearint(4) NULL数据年份
 companyIdint(11) NULL公司主键
 elementTemplateIdint(11) NULL元素主键
 periodtinyint(1) NULL期间
 valuedecimal(20,2) NULL
 memovarchar(1000) NULL备注
 statustinyint(1) NULL状态(1:有效;0:无效)
 createUserIdint(11) NULL创建人主键
 createTimedatetime NULL创建时间
 modifyUserIdint(11) NULL修改人主键
 modifyTimedatetime NULL修改时间

包含索引如下:

 IndexesColumnsIndex Type
PRIMARYidUnique
 Composite1companyId, year, period, elementTemplateIdUnique

表类型为innodb,在执行某个查询语句时会返回大于30万条结果,耗时5秒左右,SQL语句使用到了Composite1索引,explain检查索引type类型为range,SQL如下:

SELECT year, elementTemplateId, value
FROM Base_Proportion_ConsBalanceSheet
WHERE companyId IN (id1, id2, id3, ......, idn) AND year=xxx AND period=x AND status = 1

由于这只是最简单的单表查询,感觉在SQL上好像没有什么能优化的地方了(如果有的话望各位看官给予指点),于是考虑修改MySQL的配置,在my.ini中有3处地方可以修改innodb_buffer_pool_size、innodb_log_buffer_size和innodb_log_file_size,其中最重要的就是innodb_buffer_pool_size(参数作用就不解释了,看名字就能大致猜到,网上一搜一大堆),该参数默认值为8M,我们服务器是32G的内存,所以我设了8192M,innodb_log_buffer_size设了16M,innodb_log_file_size设了256M(后2个参数使用默认的也可以,主要是第一个参数),修改完后重启MySQL,执行上述语句从原来的5秒左右提升到了1秒左右,效果还是很明显的。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值