首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为只读优化MySQL?

为只读优化MySQL?
EN

Database Administration用户
提问于 2012-08-15 08:18:05
回答 1查看 4.4K关注 0票数 6

我们有14 GB的CSV,总共1.38亿行。我首先用InnoDB将其导入一个InnoDB表,然后再用MyISAM尝试。在这两种情况下,主键上的简单选择(这只是一个自动递增的int)花费了6-7秒,尽管MyISAM有时在5-6秒时会更快一些。

我们只需要写一次数据,我一直在使用mysqlimport。考虑到这一点,我如何提高查询速度?

.我们有2G内存,而且所有的东西都是一个表(而且由于查询的性质,它必须保持这样的状态),这是毫无价值的。考虑到硬件,这是我能期望的最好的性能吗?或者还有什么我应该尝试的,比如压缩?还是真的,我需要更多的内存?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-08-15 20:53:11

MyISAM行格式

如果表中有很多VARCHAR字段,我想建议如下

对于加载的每一个MyISAM表,都要事先执行此操作

代码语言:javascript
复制
ALTER TABLE mytable ROW_FORMAT=Fixed;

这将使查询性能提高15%-30%,而无需更改任何其他内容。这样做的副作用是拥有更大的表和更大的索引。

我曾就这方面发表过以下文章:

增加内存

如果有许多索引,则可能希望在DB上增加RAM,然后尝试将所有MyISAM索引页预加载到密钥缓冲区中。

首先计算您想要的密钥缓冲区的大小(在GigaBytes中)

代码语言:javascript
复制
SELECT CEILIING(SUM(index_length)/POWER(1024,3)) SuggestedKeyBufferSize
FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT
IN ('information_schema','performance_schema','mysql');

如果可以为DB设置SuggestedKeyBufferSize,则执行以下操作(例如4G)

)将其设置在/etc/my.cnf中。

代码语言:javascript
复制
[mysqld]
key_buffer_size=4G

步骤2)预加载所有MyISAM索引

请看我关于如何做到这一点的文章:MySQL温程序

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/22509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档