php - 10,000,000行数据库的最佳存储引擎

标签 php mysql innodb myisam

我有一个包含 10,000,000 多行的数据库表,我对其进行处理以创建一个新表。什么类型的存储引擎最适合读取?

目前我使用:

$sql = "UPDATE `packages_unsorted` SET `acv_return_viadetails` = '0';";

然后选择记录:

$sql = "SELECT * FROM `packages_unsorted` WHERE `acv_return_viadetails` = '0' LIMIT 1000;";

我收集主键id放入名为 $ids 的数组中,然后处理记录并将数据写入 CSV 文件,以便在每 1000 行末尾导入。 然后我用以下内容更新 acv_return_viadetails 字段:

$sql = "UPDATE `packages_unsorted` SET `acv_return_viadetails` = '1' WHERE `id` IN ('".implode("','",$ids)."') LIMIT 1000;";

由于上面是对表的唯一写入,我每次都选择所有字段。我应该使用内存表或其他类型的存储引擎来加快速度吗?或者我可以引入任何其他优化来加快速度吗?

对于这样的操作,合理的 my.cnf 配置是什么。

提前致谢:)

最佳答案

您在 acv_return_viadetails 字段上有索引吗?

如果你想加快导入速度,我刚刚用C++编写了一个程序,可以在65秒内将300MB的文件导入mysql。也许您可以对其进行调整以供您使用。

参见https://github.com/homer6/import-geoip-data

关于php - 10,000,000行数据库的最佳存储引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8110433/

相关文章:

javascript - 如何使用计划日期和时间触发此示例?

具有可变数字表名称的 PHP-SQL 准备语句

python - parse_dates 如何与 pd.read_sql_query 一起使用

MYSQL查询处理一对值中的空值

MySQL回滚事务的方法有哪些有效?

mysql - NULL 对 MySQL 表有什么影响? (InnoDB)

php - 如何在不登录的情况下使用google api获取分析数据?

php - Codeigniter 3 fatal error : Call to a member function database() on null

OSX Sierra 上的 MySQL 无法启动 : The server quit without updating PID file

mysql - 在 MySQL 中将 MyISAM 转换为 InnoDB