我们有14 GB的CSV,总共1.38亿行。我首先用InnoDB将其导入一个InnoDB表,然后再用MyISAM尝试。在这两种情况下,主键上的简单选择(这只是一个自动递增的int)花费了6-7秒,尽管MyISAM有时在5-6秒时会更快一些。
我们只需要写一次数据,我一直在使用mysqlimport。考虑到这一点,我如何提高查询速度?
.我们有2G内存,而且所有的东西都是一个表(而且由于查询的性质,它必须保持这样的状态),这是毫无价值的。考虑到硬件,这是我能期望的最好的性能吗?或者还有什么我应该尝试的,比如压缩?还是真的,我需要更多的内存?
发布于 2012-08-15 20:53:11
如果表中有很多VARCHAR字段,我想建议如下
对于加载的每一个MyISAM表,都要事先执行此操作
ALTER TABLE mytable ROW_FORMAT=Fixed;这将使查询性能提高15%-30%,而无需更改任何其他内容。这样做的副作用是拥有更大的表和更大的索引。
我曾就这方面发表过以下文章:
May 10, 2011:在固定大小的字段上使用CHAR和VARCHAR的性能影响是什么? (权衡#2)Aug 12, 2011:哪个数据库管理系统适合超高速读取和简单的数据结构? (标准杆3杆)Sep 20, 2011:最好的MyISAM和InnoDBJan 03, 2012:用于高端和繁忙服务器的优化my.cnf (在标题复制下)如果有许多索引,则可能希望在DB上增加RAM,然后尝试将所有MyISAM索引页预加载到密钥缓冲区中。
首先计算您想要的密钥缓冲区的大小(在GigaBytes中)
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中。
[mysqld]
key_buffer_size=4G步骤2)预加载所有MyISAM索引
请看我关于如何做到这一点的文章:MySQL温程序
https://dba.stackexchange.com/questions/22509
复制相似问题