在mysql数据库中插入多个字符串的更好方法

时间:2014-10-31 12:18:38

标签: php mysql mysqli import

所以,我有几个txt个文件,每个容器大约有400,000行。

每一行都是一个单词,我需要添加到我的数据库中,如果它不在那里。

目前我检查/添加每个单词的代码是

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);
if($num == '0'){
    $length = strlen($word);
    $timestamp = time();
    @mysql_sql("INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ('{$word}', '{$length}', '{$timestamp}')");
}

,被调用的函数是:

function mysql_sql($sql){
    global $db;

    $result = $db->query($sql);

    return $result;
}
function mysql_num($result){
    return $result->num_rows;
}

我正在寻找一种更好的方法将每个单词插入数据库。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:1)

我可以考虑一些方法来做到这一点。

首先,如果您可以访问MySQL服务器的文件系统,则可以使用LOAD DATA INFILE创建新表,然后从该新表插入到word_list表中。这很可能是您最快的选择。

其次(如果您无法访问MySQL服务器的文件系统),请在word_list.word上放置主键或唯一索引。然后摆脱SELECT查询并使用INSERT IGNORE INTO word_list ...。这将允许MySQL自动跳过重复项,而无需您使用查询/插入操作。

第三,如果您的表使用处理事务的访问方法(InnoDB,而不是MyISAM),请在开始插入循环之前发出BEGIN;语句。然后,每隔几百行发出COMMIT;BEGIN;。然后在最后一期COMMIT;。这将把您的操作包装在多行交易中,因此会加快速度。

答案 1 :(得分:0)

试试这段代码。它将首先使用您的所有值创建查询,您将仅运行查询ONCE ...不会一次又一次地运行

$values = array();

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);

$insert_query = "INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ";

if ($num == '0') {
    $length = strlen($word);
    $timestamp = time();
    $values[] = "('$word', '$length', '$timestamp')";
}

$insert_query .= implode(', ', $values);

@mysql_sql($insert_query);