Mysql 非常慢的innodb操作

Mysql 非常慢的innodb操作,mysql,innodb,mariadb,Mysql,Innodb,Mariadb,我有一个php脚本,用于将url与数据库url进行比较,并只保存新的url。问题是这个脚本的每一步都花费了很长的时间(总共超过10分钟)。以下是步骤: $query = sprintf("DELETE FROM %s ; ", $DB ['compare_result_table']); $query = sprintf("LOAD DATA INFILE '%s' IGNORE INTO TABLE %s FIELDS TERMINATED BY ',' EN

我有一个php脚本,用于将url与数据库url进行比较,并只保存新的url。问题是这个脚本的每一步都花费了很长的时间(总共超过10分钟)。以下是步骤:

$query = sprintf("DELETE FROM %s ; ", $DB ['compare_result_table']);

$query = sprintf("LOAD DATA INFILE '%s' IGNORE INTO TABLE %s
        FIELDS TERMINATED BY ','
        ENCLOSED BY \"'\"
        LINES TERMINATED BY '\n'
        (domain, url_value)",
      $real_out_path, $DB["compare_result_table"]);

$query = sprintf(" INSERT INTO %s SELECT domain 
        FROM %s ;", $DB ['compare_url_table'], 'domain_data' );

$query = sprintf("DELETE a.*
              FROM %s a INNER JOIN %s b using (domain);",
         $DB["compare_result_table"], $DB ['compare_url_table']);
以下是表格说明:

DROP TABLE IF EXISTS cmp_url;
CREATE TABLE cmp_url
(
    domain varchar(255),
    index (domain)
);

DROP TABLE IF EXISTS cmp_result;
CREATE TABLE cmp_result
(
    domain varchar(255),
    url_value varchar(4096),
    index (domain)

);
每次调用ShowProcessList时,我都会看到每个步骤(不包括从文件加载数据)都需要很长时间。包含我们要比较的域的domain_数据表现在有60万条记录。它越大,所有的步骤都越慢

以下是我在my.cnf中更改的一些选项:

innodb_lock_wait_timeout = 360
innodb_autoinc_lock_mode=2
binlog_format=mixed
transaction-isolation = READ-COMMITTED

但这并没有改变任何事情。我怎样才能解决这个问题?感谢您抽出时间。

完全替换桌子:

CREATE TABLE new LIKE real;
LOAD (or whatever) into new.
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

快。0-停机时间。

为什么用<代码>内部连接< /代码>删除?尝试从PHP到MySQL服务器执行shell脚本,比使用MySQL连接器更快地执行shell脚本,考虑传输文件的时间,用shell脚本传输在网络上。我认为它会比子查询快。或者我应该用什么方法。另外,删除和插入cmp_url表的过程非常长。@randiel,我认为这是数据库问题,是对数据库的一种调整!模式大小如何?