tir*_*ing 6 mysql innodb myisam optimization hardware
我们有 14 GB 的 CSV,总计 1.38 亿行。我首先使用 InnoDB 将其导入到 MySQL 表中,然后使用 MyISAM 再次尝试。在这两种情况下,对主键(只是一个自动递增的 int)的简单 SELECT 需要 6-7 秒,尽管 MyISAM 有时在 5-6 秒时快一点。
我们只需要写一次数据,我一直在使用mysqlimport。考虑到这一点,如何提高查询速度?
...我们有 2 演出 RAM 并且一切都是一张表,这毫无价值(并且由于查询的性质,它必须保持这种状态)。考虑到硬件,这是我可以期待的最佳性能吗?或者还有什么我应该尝试的,比如压缩?或者真的,我需要更多的内存?
如果表中有很多 VARCHAR 字段,我很乐意建议以下内容
对于您加载的每个 MyISAM 表,请预先执行此操作
ALTER TABLE mytable ROW_FORMAT=Fixed;
Run Code Online (Sandbox Code Playgroud)
这将在不改变任何其他内容的情况下将查询性能提高高达 15-30% 。这样做的副作用是拥有更大的表和更大的索引。
我之前有过关于此的帖子:
May 10, 2011
:在固定大小字段上使用 CHAR 与 VARCHAR 对性能有何影响?(权衡#2)Aug 12, 2011
:哪种 DBMS 适合超快速读取和简单的数据结构?(三杆)Sep 20, 2011
:MyISAM 和 InnoDB 的优点Jan 03, 2012
:针对高端和繁忙的服务器优化了 my.cnf (在“复制”标题下)如果您有许多索引,您可能需要增加数据库服务器上的 RAM,然后尝试将所有 MyISAM 索引页预加载到键缓冲区中。
首先计算您想要多大的密钥缓冲区(以千兆字节为单位)
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');
Run Code Online (Sandbox Code Playgroud)
如果SuggestedKeyBufferSize
可以为DB Server设置,则执行以下操作(例如4G)
步骤 01) 在 /etc/my.cnf 中设置
[mysqld]
key_buffer_size=4G
Run Code Online (Sandbox Code Playgroud)
STEP 02) 预加载所有MyISAM索引
请参阅我关于如何执行此操作的帖子:MySQL 热过程
归档时间: |
|
查看次数: |
4312 次 |
最近记录: |